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

업데이트:



문제 정보


풀이

문제

-1, 0, 1로 채워진 N x N 종이를 같은 값으로만 이루어진 정사각형 단위로 분할했을 때 각 값 종이 개수를 구하는 문제입니다.

코드

import sys;read=sys.stdin.readline

n=int(read())
a,l=[0,0,0],[list(map(int,read().split()))for _ in range(n)]

def div(si,ei,sj,ej):
    global a,l
    f=False
    for i in range(si,ei):
        for j in range(sj,ej):
            if l[i][j]!=l[si][sj]:
                f=True
                break
        if f:break
    if f:
        for i in range(3):
            for j in range(3):
                ti,tj=si+(ei-si)//3*i,sj+(ej-sj)//3*j
                div(ti,ti+(ei-si)//3,tj,tj+(ej-sj)//3)
    else:a[l[si][sj]+1]+=1

div(0,n,0,n)
print(*a,sep='\n')

설명

현재 영역이 모두 같은 값인지 검사하고, 다르면 3x3으로 다시 분할해 재귀 호출합니다.

같은 값이면 해당 카운터(-1,0,1 -> 인덱스 0,1,2)를 증가시킵니다.



댓글남기기