본문 바로가기
백준

마인크래프트-18111번

by 청원뿔세포 2022. 11. 8.

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

댓글