728x90
N,M,B = map(int,input().split())
land = []
height_min = 1e9
entire_block = B
for _ in range (0,N):
a = list(map(int,input().split()))
land.append(a)
entire_block += sum(a)
height_min = min(height_min, min(a))
k = (entire_block // (N * M))
ans = []
k = min(k, 256)
for height in range (height_min,k+1):
time = 0
for i in range (0,N):
for j in range (0,M):
if land[i][j] < height: #쌓아야함
time += (height - land[i][j])
elif land[i][j] > height: #깎아야함
time += 2 * (land[i][j] - height)
ans.append([time, height])
ans.sort(key = lambda x:x[0])
x = ans[0][0] #최저시간
height = []
for i in range (0,len(ans)):
if ans[i][0] == x:
height.append(ans[i][1])
height.sort(reverse = True)
print(x,height[0])
아이디어로서 쓸만한 것 중 하나는, 높이가 최대 256이라는 것 정도가 되겠다.
그리고 k라는 변수로 쌓을 수 있는 최대 높이 (평평하게 하기 위한)를 구하는 것이 주효한 포인트가 될 것이다.
'코딩' 카테고리의 다른 글
[BOJ] 3964 팩토리얼과 거듭제곱 Python (0) | 2024.03.18 |
---|---|
[BOJ] 1149 RGB 거리 python (0) | 2024.03.12 |
[BOJ] 2252 줄 세우기 Python (0) | 2024.02.28 |
[BOJ] 1132 합 (Python) (1) | 2024.02.27 |
[BOJ] 백준 14502 연구소 Python (0) | 2024.02.23 |