python3에서 시간초과가 뜨면 pypy로 제출하면 정답이다.
import sys
y_axis, x_axis, inven = map(int,input().split())
graph = []
for i in range(y_axis):
inn = list(map(int,sys.stdin.readline().split()))
graph.append(inn)
avg = 0
for i in graph:
avg += sum(i)
avg = avg//(x_axis*y_axis)
avg_cost = [inven,0,avg]
for y in range(y_axis):
for x in range(x_axis):
gap = graph[y][x] - avg
if gap>0:
avg_cost[1] += gap*2
avg_cost[0]+=gap
elif gap<0:
avg_cost[1] += gap*-1
avg_cost[0] += gap
# print('avg:',avg_cost)
# avg ++
upper_level = 0
upper_buffer = avg_cost
while True:
upper_level+=1
buffer = [inven,0,avg+upper_level]
for y in range(y_axis):
for x in range(x_axis):
gap = graph[y][x] - (avg+upper_level)
if gap > 0:
buffer[1] += gap*2
buffer[0] += gap
elif gap < 0:
buffer[1] += gap*-1
buffer[0] += gap
if buffer[0] < 0:
break
elif buffer[1] > upper_buffer[1]:
break
else:
upper_buffer = buffer
# print('upper:',upper_buffer)
# avg --
lowwer_level = 0
lowwer_buffer = avg_cost
while True:
lowwer_level-=1
buffer = [inven,0,avg+lowwer_level]
for y in range(y_axis):
for x in range(x_axis):
gap = graph[y][x] - (avg+lowwer_level)
if gap > 0:
buffer[1] += gap*2
buffer[0] += gap
elif gap < 0:
buffer[1] += gap*-1
buffer[0] += gap
if buffer[0] < 0:
break
elif buffer[1] > lowwer_buffer[1]:
break
else:
lowwer_buffer = buffer
# print('lowwer:',lowwer_buffer)
if upper_buffer[1] > lowwer_buffer[1]:
print(lowwer_buffer[1], lowwer_buffer[2])
else:
print(upper_buffer[1], upper_buffer[2])
'백준' 카테고리의 다른 글
좌표 정렬하기 2 - 11651번 (0) | 2022.11.08 |
---|---|
제로 - 10773번 (0) | 2022.11.08 |
키로거 - 5397번 (0) | 2022.11.07 |
절댓값 힙 - 11286번 (0) | 2022.10.31 |
후위 표기식 - 1918번 (0) | 2022.10.31 |
댓글