알고리즘/Python

[백준/Python] 1780번: 종이의 개수

_SIHA_ 2022. 3. 3. 17:31

📖  문제 링크

https://www.acmicpc.net/problem/1780

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수

www.acmicpc.net

 

👩‍💻  문제풀이

 

백준 2630 - 색종이 만들기 문제를 먼저 풀면 쉽게 해결할 수 있다.

2630번은 각 변을 2개로 나눠가는 문제였다면, 본 문제는 3개로 나눈다. 

 

9사분면을 만들 수 있도록 행렬을 나눠주면 쉽게 해결 가능!

 

 

 

  최종 코드

import sys
input = sys.stdin.readline

n = int(input())
paper = [list(map(int, input().split())) for _ in range(n)]
result = []
def dividePaper(x, y, n):
    check = paper[x][y]
    for i in range(x, x+n):
        for j in range(y, y+n):
            if check != paper[i][j]:
                dividePaper(x, y, n//3) 
                dividePaper(x,  y+n//3, n//3) 
                dividePaper(x, y+(n//3*2), n//3)
                
                dividePaper(x+n//3, y, n//3)
                dividePaper(x+n//3, y+n//3, n//3)
                dividePaper(x+n//3, y+(n//3*2), n//3)
                
                dividePaper(x+(n//3*2), y, n//3)
                dividePaper(x+(n//3*2), y+n//3, n//3)
                dividePaper(x+(n//3*2), y+(n//3*2), n//3)
                return
            
    if check == 0:
        result.append(0)
    elif check == -1:
        result.append(-1)
    else:
        result.append(1)
        
dividePaper(0,0,n)
print(result.count(-1))
print(result.count(0))
print(result.count(1))