9934. 완전 이진 트리
9934번: 완전 이진 트리
상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래
www.acmicpc.net
- 내 풀이
- bfs
- 중간 point로 앞 뒤 리스트를 나눠서 queue에 넣고
- 중간지점을 result에 순서대로 넣는다
- => 앞 리스트, 뒷 리스트 하나하나씩 들어감
- dfs 로 하게되면 앞리스트 전부 탐색 후 뒷 리스트를 탐색하기 때문에 순서대로 출력되지 못함
- bfs
from collections import deque
def bfs(lst):
queue.append(lst)
while queue:
x=queue.popleft()
if len(x)<1: break
point=len(x)//2
result.append(x[point])
queue.append(x[:point])
queue.append(x[point+1:])
k=int(input()) #높이 k
lst=list(map(int,input().split()))
queue=deque()
point=len(lst)
result=[]
bfs(lst)
cnt=0
z=1
for r in result:
print(r, end=" ")
if z==1 or cnt==z:
print()
z*=2
cnt=0
cnt+=1
- 다른 사람 풀이
- 레벨 크기만큼 리스트를 만들고
- 각 레벨 인덱스에 해당 레벨의 값들 append
- dfs 파라미터로 레벨을 같이 전달
import sys
input = sys.stdin.readline
K = int(input())
lst = list(map(int, input().split()))
tree = [[] for _ in range(K)]
def makeTree(arr, x):
mid = (len(arr)//2)
tree[x].append(arr[mid])
if len(arr) == 1:
return
makeTree(arr[:mid], x+1)
makeTree(arr[mid+1:], x+1)
makeTree(lst, 0)
for i in range(K):
print(*tree[i])
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준] [BFS] [위상정렬] 2056. 작업 (0) | 2023.04.18 |
|---|---|
| [백준] [BFS] 9019. DSLR (0) | 2023.04.15 |
| [백준] [DFS] [백트래킹] 13023. ABCDE (0) | 2023.04.14 |
| [백준][BFS] 1325. 효율적인 해킹 (0) | 2023.04.14 |
| [백준] [DFS] [트리] 1967. 트리의 지름 (0) | 2023.04.12 |