https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
문제
정답 풀이
#쿼드 트리 함수 정의
def quad_tree(x, y, n):
global matrix, blue, white #주어진 배열과 색 카운트 끌어오기
color = matrix[y][x] #첫 색깔과 나머지 색이 같아야함
double_break = False #for문 탈출용 double_break
for i in range(x, x+n):
if double_break:
break
for j in range(y, y+n):
if matrix[j][i] != color: #하나라도 틀릴시에 재귀문 생성
quad_tree(x, y, n//2) #2사분면
quad_tree(x + n//2, y, n//2) #1사분면
quad_tree(x, y + n//2, n//2) #3사분면
quad_tree(x + n//2, y + n//2, n//2) #4사분면
double_break = True #탈출!
break
if not double_break:
if matrix[y][x] == 1: #파란색이라면
blue += 1
else:
white += 1 #흰색이라면
N = int(input())
matrix = []
blue = 0
white = 0
#matrix 받기
for _ in range(N):
matrix.append(list(map(int, input().split())))
quad_tree(0,0,N)
print(white)
print(blue)
출처 : https://claude-u.tistory.com/268
해설
아직도 이해가 안가는 double_break의 요소. 루프에 빠지지 않게 하기 위함인건 알겠는데...
정답 풀이 2 (예정)
x
출처:https://pacific-ocean.tistory.com/233
해석
'sw사관학교 정글 2기 > 02 이분탐색, 분할정복, 스택, 큐, 우선순위 큐' 카테고리의 다른 글
[이분탐색] 백준 2805번 나무 자르기 with Python3 ★★ (0) | 2021.08.13 |
---|---|
[이분탐색] 백준 1920번 수 찾기 with Python3 ★ (0) | 2021.08.13 |
[큐] 백준 11866번 요세푸스 문제0 with Python3 (0) | 2021.08.13 |
[큐] 백준 2164번 카드2 with Python3 (0) | 2021.08.13 |
[큐] 백준18258번 큐 2 with Python3 (0) | 2021.08.13 |
댓글