728x90
반응형
문제 출처 :
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1≤N ≤64의 범위를 가진다. 두 번째 줄부터는 길이 N 의 문자열이 N 개 들어온다. 각 문자열은 0 또는
www.acmicpc.net
문제 풀이 :
- 앞서 푼 종만북의 쿼드트리 뒤집기와 매우 비슷하게 느껴졋지만 난이도는 더 낮다.
- 종만북의 문제처럼 가장 큰 단위에서 체크하며 조건에 맞는다면 (0 이나 1로 다 채워져있다면) 그대로 return 하고 조건에 맞지 않는다면 재귀로 왼쪽상단,오른쪽상단,왼쪽 하단, 오른쪽 하단을 나눠서 조건이 맞을때까지 찾아본다.
- 입력이 무조건 2^N이기때문에 idx나 간격을 찾기가 굉장히 편하다.
n=int(input())
maps = [[] for _ in range(n)]
for i in range(n):
temp = input()
for j in temp:
maps[i].append(j)
def check_area(i,j,k):
global n,maps
range_val = n//(2**k)
start_val = maps[i][j]
for x in range(i,i+range_val):
for y in range(j,j+range_val):
if(start_val!=maps[x][y]):
#print(i,j,k)
return False, None
return True, start_val
def quadtree(i,j,k):
global maps,n
condition , str_ = check_area(i,j,k)
#print(i,j,k,condition,str_)
if(condition):
return str_
k+=1
temp = 2**k
UL = quadtree(i,j,k)
UR = quadtree(i,j+(n//temp),k)
LL = quadtree(i+(n//temp),j,k)
LR = quadtree(i+(n//temp),j+(n//temp),k)
return '('+UL+UR+LL+LR +')'
print(quadtree(0,0,0))
반응형
'Computer Science > Algorithm' 카테고리의 다른 글
[종만북] 원주율 외우기(PI) (C++) (0) | 2021.01.13 |
---|---|
[종만북] 타일링(TILING2) (Python) (0) | 2021.01.13 |
[백준] 20528 - 끝말잇기 (Python) (0) | 2021.01.03 |
[백준] 20492 - 세금 (Python) (0) | 2021.01.02 |
[종만북] 쿼드 트리 뒤집기(QUADTREE) (C++) (0) | 2021.01.02 |