JiSoo's Devlog

[백준 / 파이썬] 18111번 마인크래프트 본문

코테준비

[백준 / 파이썬] 18111번 마인크래프트

지숭숭숭 2024. 1. 14. 19:40

n, m, B = map(int, input().split())
g = [list(map(int, input().split())) for i in range(n)]
mt = 9999999999
h = 0

for i in range(257):
    bottom = 0
    top = 0
    for j in range(n): #가로
        for k in range(m): #세로
            if g[j][k] >= i: #블럭이 현재 높이보다 크면
                top += g[j][k] - i
            else:
                bottom += i - g[j][k]

    if bottom > top + B:
        continue

    t = bottom + (top*2)
    if t <= mt:
        mt = t
        h = i
print(mt, h)

좌표의 가장 위의 블록 제거해 인벤토리에 넣기 - 2초

인벤토리에서 블록 하나 꺼내서 올려놓기 - 1초

인벤토리에는 B개의 블록

만들 수 있는 층수는 0~256층

i층을 만들기 위한 땅을 for문으로 돌면서 i층으로 만들어주기 위한 작업

만약 땅[x][y] >= i라면 흙을 파서 높이 맞춰주고 땅을 판 횟수를 top에 저장

땅[x][y] < i라면 흙을 쌓아 높이 맞춰주고 쌓은 횟수 bottom에 저장

가지고 있는 흙인 top+B보다 필요한 흙 bottom이 많다면 평평한 땅을 만들 수 없다

pypy3으로 제출해야 시간 초과가 뜨지 않는다

728x90