๊ธฐ๋ก๋ฐฉ

BOJ_18111 : ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ๋ณธ๋ฌธ

CodingTest/Python

BOJ_18111 : ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ

Soom_1n 2022. 8. 21. 00:05

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

18111๋ฒˆ: ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ

ํŒ€ ๋ ˆ๋“œ์‹œํ”„ํŠธ๋Š” ๋Œ€ํšŒ ์ค€๋น„๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ง€๋ฃจํ•ด์ ธ์„œ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒŒ์ž„์ธ ‘๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ’๋ฅผ ์ผฐ๋‹ค. ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋Š” 1 × 1 × 1(์„ธ๋กœ, ๊ฐ€๋กœ, ๋†’์ด) ํฌ๊ธฐ์˜ ๋ธ”๋ก๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ 3์ฐจ์› ์„ธ๊ณ„์—์„œ ์ž์œ ๋กญ๊ฒŒ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋•… ๊ณ ๋ฅด๊ธฐ ์ž‘์—…์˜ ์ตœ์†Œ์‹œ๊ฐ„์ด๋ฉฐ ๊ฐ€์žฅ ๋†’์ด๊ฐ€ ๋†’์€ ์ƒํƒœ์˜ ์‹œ๊ฐ„๊ณผ ๋†’์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

# python3 : ์‹œ๊ฐ„์ดˆ๊ณผ , pypy3 : ํ†ต๊ณผ
import sys

n, m, b = map(int, sys.stdin.readline().split())
arr = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]

answer = sys.maxsize
index = 0

for floor in range(257): # (1)
    up, down = 0, 0

    for i in range(n): 	 # (2)
        for j in range(m):
            if arr[i][j] >= floor:	# (3)
                up += arr[i][j] - floor
            else:			# (4)
                down += floor - arr[i][j]
    
    if b + up >= down and down + (up * 2) <= answer: # (5)
        answer = down + (up * 2)
        index = floor

print(answer, index)

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • (1) : ์ธต ์ˆ˜๋ฅผ 0๋ถ€ํ„ฐ 256๊นŒ์ง€ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๊ณ ๋ฅด๊ธฐ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•œ์ง€, ์ตœ์†Œ์‹œ๊ฐ„์ธ์ง€ ํ™•์ธํ•œ๋‹ค
    • (2) : ์ž…๋ ฅ๋ฐ›์€ ๋†’์ด ์ •๋ณด๋ฅผ ์ˆœํšŒํ•œ๋‹ค
      • (3) : ๋ธ”๋ก์˜ ๋†’์ด๊ฐ€ ํ˜„์žฌ ์ธต ์ˆ˜(floor)๋ณด๋‹ค ํฌ๋‹ค๋ฉด ํฌ ์ฐจ์ด๋ฅผ up์— ํ•ฉ์‚ฐ
      • (4) : ๋ธ”๋ก์ด ๋†’์ด๊ฐ€ ํ˜„์žฌ ์ธต ์ˆ˜(floor)๋ณด๋‹ค ์ž๊ฐ€๋‹ค๋ฉด ํฌ ์ฐจ์ด๋ฅผ down์— ํ•ฉ์‚ฐ
      • up : ๋นผ์•ผํ•˜๋Š” ๋ธ”๋ก
      • down : ๋”ํ•ด์•ผํ•˜๋Š” ๋ธ”๋ก
    • (5) : ๊ธฐ์กด ๋ธ”๋ก(b)์™€ ๋นผ์•ผํ•˜๋Š” ๋ธ”๋ก(up)์˜ ํ•ฉ์ด ๋”ํ•ด์•ผํ•˜๋Š” ๋ธ”๋ก(down)๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ๋•…๊ณ ๋ฅด๊ธฐ ๊ฐ€๋Šฅ.
    • (5) : ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ €์žฅ๋œ ์‹œ๊ฐ„๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ตœ์‹ ํ™” ์‹œ์ผœ์คŒ
      • ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(answer) : ๋”ํ•˜๊ธฐ(1์ดˆ์”ฉ) + ๋นผ๊ธฐ(2์ดˆ์”ฉ)
      • ๋•…๊ณ ๋ฅด๊ธฐ๋ฅผ ์ง„ํ–‰ํ•œ ๋†’์ด : index

๐Ÿ”ธ ์˜ค๋‹ต ์ฝ”๋“œ ๐Ÿ”ธ

import sys
input = sys.stdin.readline

N, M, B = map(int, input().split())

strs = ""
for i in range(N):
    strs += input().rstrip() + " "
arr = list(map(int,strs.split()))

all_same = False
answer = 0

while not all_same:
    if len(set(arr)) == 1:
        all_same = True
        break

    if not all_same:
        hi = max(arr)
        low = min(arr)
        hc = arr.count(hi)
        lc = arr.count(low)
        if hc < lc or B < lc:
            arr = list(map(lambda x: x-1 if x==hi else x, arr))
            B += hc
            answer += 2 * hc
        else:
            arr = list(map(lambda x: x+1 if x==low else x, arr))
            B -= lc
            answer += lc
print(answer)

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • python3, pypy3 ๋ชจ๋‘ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ฝ”๋“œ์ด๋‹ค.
  • ๋ธ”๋ก ๋†’์ด ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ์ง€์†์ ์œผ๋กœ ๋งค์นญํ•˜๋ฉฐ ๋•…์„ ๊ณ ๋ฅด๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • N, M์˜ ์ตœ๋Œ€๊ฐ’์ด 500์ด๋ฏ€๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ˜๋ณต์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ฌธ์ œ ์ ‘๊ทผ์„ ์ž˜๋ชปํ•ด์„œ ๊ฒฐ๊ตญ ๋‹ต์„ ์ฐพ์•„๋ดค๋‹ค. (๋‹ต์•ˆ ํฌ์ŠคํŒ…)
  • ๋ฌธ์ œ ํƒœ๊ทธ์— ๋ธŒ๋ฃจํŠธ ํฌ์Šค๊ฐ€ ์žˆ์–ด์„œ ์–ด๋Š ๋ถ€๋ถ„์„ ๋ชจ๋‘ ์ฐพ์•„๋ด์•ผํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€, ๋†’์ด๊ฐ€ ์ผ์ •ํ•ด์งˆ๋•Œ๊นŒ์ง€ ํ‰ํƒ„ํ™”๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์ง€๋งŒ ํ‹€๋ ธ๋‹ค...
  • ๋†’์ด๋ฅผ 0๋ถ€ํ„ฐ 256๊นŒ์ง€ ๋†’์—ฌ๊ฐ€๋ฉฐ ์ตœ์†Œ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ๋†’์ธ ์ธต์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ์–ด์•ผํ–ˆ๋‹ค.
  • ์‹œ๊ฐ„์ดˆ๊ณผ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ ์ฐธ ๋จธ๋ฆฌ์•„ํ”„๊ณ  ๋‚ด ์ฝ”๋“œ๋ฅผ ๊ณ„์† ์˜์‹ฌํ•ด์•ผํ•œ๋‹ค๋Š”๊ฒŒ ํ’€์ด๊ฐ€ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค. ์ข€๋” ๊ทผ๊ฑฐ ์žˆ๊ฒŒ ํ’€์–ด๊ฐ€์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
  • python3๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ pypy3๋กœ ํ•ด์•ผํ•œ๋‹ค๋Š”๊ฒŒ ๋˜๋‹ค๋ฅธ ์•„์‰ฌ์›€์œผ๋กœ ๋‚จ์•˜๋‹ค.

728x90

'CodingTest > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1547 : ๊ณต  (0) 2022.08.22
BOJ_1676 : ํŒฉํ† ๋ฆฌ์–ผ 0์˜ ๊ฐœ์ˆ˜  (0) 2022.08.21
BOJ_2805 : ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ  (0) 2022.08.20
BOJ_2108 : ํ†ต๊ณ„ํ•™  (0) 2022.08.18
BOJ_10866 : ๋ฑ  (0) 2022.08.17