PS/BOJ Python

1780번 - 종이의 개수

zpqmdh 2022. 2. 4. 04:53

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

 

1780번: 종이의 개수

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

www.acmicpc.net

N = int(input())
Map = []
ans = [0, 0, 0] #-1 0 1로 이루어진 종이의 개수
for i in range(N):
    Map.append(list(map(int, input().split())))
def check(startX:int, startY:int, length:int):
    for i in range(length):
        for j in range(length):
            #모두 같은 원소로 이루어지지 않았을 경우
            if Map[startX+i][startY+j] != Map[startX][startY]:
                return False
    return True
def divide(startX:int, startY:int, length:int):
    #모두 같은 원소로 이루어졌을 경우 -> 해당 값의 개수 +1
    if check(startX, startY, length) == True:
        ans[Map[startX][startY] + 1] += 1
    #아닐 경우 9등분
    else:
        for i in range(3):
            for j in range(3):
                divide(startX+i*length//3, startY+j*length//3, length//3)
    return
divide(0,0,N)
for i in ans:
    print(i)