알고리즘/baekjoon
[알고리즘/baekjoon] 1780_종이의 개수(python)
천뿌니
2021. 11. 23. 22:14
728x90
문제
https://www.acmicpc.net/problem/1780
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수
www.acmicpc.net
# 2630_색종이 만들기와 유사한 유형으로 색종이에서는 N/2로 나눴지만, 이 문제는 3의 배수로 처리해줘야한다.
import sys
N = int(sys.stdin.readline())
data = []
for _ in range(N):
data.append(list(map(int, sys.stdin.readline().split())))
ans = {"-1":0, "0":0, "1":0} # -1, 0, 1의 개수를 저장하는 dict
def addOrDivide(row, col, N):
value = data[row][col] # 받아온 row,col에 해당하는 값 저장
for i in range(N):
for j in range(N):
if value != data[row + i][col + j]: # 하나라도 다른값이 나왔으면 쪼개준다
addOrDivide(row, col, N // 3)
addOrDivide(row, col + N // 3, N // 3)
addOrDivide(row, col + N * 2 // 3, N // 3)
addOrDivide(row + N // 3, col, N // 3)
addOrDivide(row + N // 3, col + N // 3, N // 3)
addOrDivide(row + N // 3, col + N * 2 // 3, N // 3)
addOrDivide(row + N * 2 // 3, col, N // 3)
addOrDivide(row + N * 2 // 3, col + N // 3, N // 3)
addOrDivide(row + N * 2 // 3, col + N * 2 // 3, N // 3)
return
ans[str(value)] += 1
addOrDivide(0, 0, N)
print(ans["-1"])
print(ans["0"])
print(ans["1"])