코딩하는 해맑은 거북이
[Python] 색종이 만들기 - 백준 (분할정복) 본문
해당 글은 백준 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