practivceAlgorithm/백준
[백준][Python] 17779 게리멘더링2
findTheValue
2022. 1. 16. 11:40
단순히 영역을 나누는 문제였습니다.
대각선에 대해 4번 범위 설정이 필요한 문제였습니다.
핵심은 1개씩 늘어나거나 줄어드는 dx, dy설정을 어떻게 할 것인가?
결국 i에서 i의 초깃값을 빼주면 0부터 시작한 다는 것을 알 수 있었습니다.
import sys
input = sys.stdin.readline
N = int(input())
matrix = [list(map(int, input().split())) for _ in range(N)]
answer = float('inf')
total = 0
for i in range(N):
for j in range(N):
total += matrix[i][j]
for x in range(N - 1):
for y in range(1, N - 1):
for d1 in range(1, min(y + 1, N - x - 1)):
for d2 in range(1, min(N - y, N - x - d1)):
area1 = 0
for i in range(x):
for j in range(y + 1):
area1 += matrix[i][j]
for i in range(x, x + d1):
for j in range(y - d1):
area1 += matrix[i][j]
for i in range(x, x + d1):
for j in range(y - d1, y - i + x):
area1 += matrix[i][j]
area2 = 0
for i in range(x):
for j in range(y + 1, N):
area2 += matrix[i][j]
for i in range(x, x + d2 + 1):
for j in range(y + d2 + 1, N):
area2 += matrix[i][j]
for i in range(x, x + d2):
for j in range(y + i - x + 1, y + d2 + 1):
area2 += matrix[i][j]
area3 = 0
for i in range(x + d1, N):
for j in range(y - d1):
area3 += matrix[i][j]
for i in range(x + d1 + d2 + 1, N):
for j in range(y - d1, y - d1 + d2):
area3 += matrix[i][j]
for i in range(x + d1 + 1, x + d1 + d2 + 1):
for j in range(y - d1, y - 2 * d1 + i - x):
area3 += matrix[i][j]
area4 = 0
for i in range(x + d1 + d2 + 1, N):
for j in range(y - d1 + d2, N):
area4 += matrix[i][j]
for i in range(x + d2 + 1, x + d1 +d2 + 1):
for j in range(y + d2 + 1, N):
area4 += matrix[i][j]
for i in range(x + d2 + 1, x + d1 + d2 + 1):
for j in range(y - i + x + 2 * d2 + 1, y + d2 + 1):
area4 += matrix[i][j]
area5 = total - (area1 + area2 + area3 + area4)
answer = min(answer, max(area1, area2, area3, area4, area5) - min(area1, area2, area3, area4, area5))
print(answer)