https://www.acmicpc.net/problem/18111
1. 좌표 (i, j)의 가장 위에 있는 블록을 제거하여 인벤토리에 넣는다.
2. 인벤토리에서 블록 하나를 꺼내어 좌표 (i, j)의 가장 위에 있는 블록 위에 놓는다.
import sys
input = sys.stdin.readline
n,m,b = map(int,input().split())
land = [list(map(int,input().split())) for _ in range(n)]
res = sys.maxsize # 작업 시간
idx = 0 # 가장 높은 층
for floor in range(257): # 0층부터 차례대로 순회
excess, lack = 0, 0 # 초과하는 블럭, 부족한 블럭
for i in range(n):
for j in range(m):
if land[i][j] >= floor: # (i,j)가 층수보다 높을 경우
excess += land[i][j] - floor # 초과분에 값 추가
else: # 낮을 경우
lack += floor - land[i][j] # 부족분에 값 추가
if excess + b >= lack: # 초과하는 블럭 + 인벤토리에 있는 블럭 >= 부족한 블럭일 경우
if lack + (excess * 2) <= res: # 블럭을 설치한 시간(1초) + 블럭을 제거하는 시간(2초)가 기존 시간보다 작을 경우
res = lack + (excess * 2) # 설치 시간 + 제거 시간
idx = floor # 층수 업데이트
print(res, idx)