코딩하는 해맑은 거북이

[Python] 색종이 만들기 - 백준 (분할정복) 본문

코딩테스트

[Python] 색종이 만들기 - 백준 (분할정복)

#CJE 2023. 8. 14.
해당 글은 백준 2630번 문제 '색종이 만들기'을 다룬다.

문제

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

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

 

설명

해당 문제는 쪼개진 사각형안에 포함된 color가 다른 게 있다면,

재귀 함수를 통해서 N//2 씩 계속해서 나누어서 해결할 수 있다.

주의할 점은 재귀함수 4번 호출하는 구간에서 마지막에 return을 해주어서 재귀함수를 종료하게 해주어야 한다.

 

코드

n = int(input())

arr = []
for i in range(n):
    arr.append(list(map(int, input().split())))

def solution(x, y, N):
    global white, blue
    color = arr[x][y]
    for i in range(x, x + N):
        for j in range(y, y + N):
            if color != arr[i][j]:
                solution(x, y, N // 2)
                solution(x, y + N // 2, N // 2)
                solution(x + N // 2, y, N // 2)
                solution(x + N // 2, y + N // 2, N // 2)
                return

    if color == 0:
        white += 1
    else:
        blue += 1

white, blue = 0, 0
solution(0, 0, n)
print(white)
print(blue)

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 이진 검색 트리 - 백준  (0) 2023.08.15
[Python] 전깃줄 - 백준  (0) 2023.08.15
[Python] 동전 1 - 백준 (DP)  (0) 2023.08.13
[Python] 치킨 배달 - 백준  (0) 2023.08.13
[Python] 나이순 정렬 - 백준  (0) 2023.08.13
Comments