본문 바로가기

코딩테스트/파이썬

백준 2630번 색종이 만들기

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
반응형

'코딩테스트 > 파이썬' 카테고리의 다른 글

백준 9663번 N-Queen  (0) 2021.02.02
백준 1780번 종이의 개수  (0) 2021.02.01
백준 11729번 하노이 탑 이동 순서  (0) 2021.01.30
백준 17478번 재귀함수가 뭔가요?  (0) 2021.01.29
백준 1629번 곱셈  (0) 2021.01.28