[ BOJ / Python ] 18111번 마인크래프트

황승환·2022년 6월 27일
0

Python

목록 보기
337/498


이번 문제는 주어진 최대 높이 256까지 임의로 높이를 지정해가며 각각의 칸에 추가해야 할 블록의 수와 지워야 할 블록의 수를 변수로 저장하고, 인벤토리 값을 갱신한 후, 추가하고 지우는 연산이 가능할 경우에 해당 시간과 높이를 구하도록 하였다. 이때 시간이 최소, 높이가 최대인 것을 만족해야 하기 때문에 시간에 대한 정답 변수와 비교시 정답 변수보다 작거나 같을 경우에 높이와 정답 변수를 갱신하도록 해야 한다.

Code

n, m, b = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(n)]
answer = 1e9
height = 0
for std in range(257):
    plus, minus = 0, 0
    for i in range(n):
        for j in range(m):
            if grid[i][j] < std:
                plus += (std - grid[i][j])
            else:
                minus += (grid[i][j] - std)
    blocks = minus + b
    if blocks < plus:
        continue
    time = 2 * minus + plus
    if answer >= time:
        answer, height = time, std
print(answer, height)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글