https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
풀이
분할정복, 재귀를 이용해서 푸는 문제입니다!
2차원 배열을 순서대로 검사하면서 첫번째 블럭과 색이 다르면 바로 4등분! 해서 다시 검사
4등분 하는 게 좀 어려웠는데 전달 인자로 검사 시작 하는 부분 좌표랑 크기를 넣어서 해결했습니다!
배열 내의 색이 모두 같거나, 배열의 크기가 1이 되면 색상별로 개수를 더해줬어요~
def paper(a, b, n):
global white, blue
color = field[a][b]
for i in range(a, a+n):
for j in range(b, b+n):
if color != field[i][j]:
paper(a, b, n//2)
paper(a + n//2, b, n//2)
paper(a, b + n//2, n//2)
paper(a + n//2, b + n//2, n//2)
return
if color == 0:
white += 1
else:
blue += 1
global white, blue
white = 0
blue = 0
n = int(input())
field = [list(map(int,input().split())) for _ in range(n)]
paper(0, 0, n)
print(white)
print(blue)
'PS > 재귀' 카테고리의 다른 글
[백준] 1991번: 트리순회 파이썬 (3) | 2024.02.28 |
---|---|
[백준] 2448번: 별 찍기 - 11 파이썬 (2) | 2024.02.28 |
[백준] 1992번: 쿼드트리 파이썬 (0) | 2024.02.28 |
[백준] 1780번: 종이의 개수 파이썬 (0) | 2024.02.28 |