코딩테스트/파이썬

백준 2630번 색종이 만들기

도리닥 2021. 1. 31. 12:41
728x90

문제 설명

 

bCount는 파란색 색종이의 수를 뜻하고 wCount는 하얀색 색종이의 수를 뜻한다. arr은 전체 종이를 담을 배열이다. 재귀함수의 인자로 a와 b는 해당 색종이의 시작점을 뜻한다. 첫 색종이는 [0,0]부터 시작하니 a=0,b=0이 된다. 시작점인 a와 b부터 색을 비교하고 만약 색이 다를 경우 a와 b에 N//2를 알맞게 더해 재귀함수를 다시 호출한다.

 

 

만약 이중for문을 통과할 경우에는 색종이의 색깔이 전부 같다는 뜻이므로 해당 색깔에 맞게 count를 늘려준다.

 

 

전체 코드

bCount = 0
wCount = 0
arr = []

def func(a,b,N):
    global bCount
    global wCount
    if N == 1:
        if arr[a][b] == 1:
            bCount += 1
        else:
            wCount += 1
        return 0

    for i in range(a,a+N):
        for j in range(b,b+N):
            if arr[i][j] != arr[a][b]:
                func(a,b,N//2)
                func(a,b+N//2,N//2)
                func(a+N//2,b,N//2)
                func(a+N//2,b+N//2,N//2)
                return 0

    if arr[a][b] == 1:
        bCount += 1
    else:
        wCount += 1
    return 0



def main():
    global bCount
    global wCount
    num = int(input())
    tmp = num
    while tmp:
        plist = list(map(int,input().split()))
        arr.append(plist)
        tmp -= 1
    func(0,0,num)
    print(wCount)
    print(bCount)


if __name__ == "__main__":
    main()
728x90
반응형