코딩테스트 준비/[백준]

[백준] 1780번 종이의 개수 파이썬

bled 2021. 7. 18. 19:49

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

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다.

www.acmicpc.net

import sys
input = sys.stdin.readline
N = int(input())
paper = []
for _ in range(N):
    paper.append(list(map(int, input().split())))


def counting_papers(r, c, n):

    check = paper[r][c]
    flag = False
    for i in range(r, r+n):
        for j in range(c, c+n):
            if paper[i][j] != check:
                flag = True
                break
        if flag:
            break
    result = [0, 0, 0]

    if flag:
        for k in range(3):
            for l in range(3):
                tmp = counting_papers(r+n//3*k, c+n//3*l, n//3)
                result = [result[i] + tmp[i] for i in range(3)]
        return result

    if check == -1:
        return [1,0,0]
    elif check == 0:
        return [0,1,0]
    else:
        return [0,0,1]


res = counting_papers(0,0,N)
for answer in res:
    print(answer)