알고리즘||코딩테스트/백준
[백준 9934번] 완전 이진 트리 (Silver1)
째로스
2023. 6. 24. 17:16
https://www.acmicpc.net/problem/9934
9934번: 완전 이진 트리
상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래
www.acmicpc.net
import sys
k=int(sys.stdin.readline())
array=list(map(int,sys.stdin.readline().split()))
layer=[[] for _ in range(k+1)]
for n in range(k,0,-1):
i=0
while 2**(k-n)+i*(2**(k-n+1))<2**k:
layer[n].append(array[2**(k-n)+i*(2**(k-n+1))-1])
i+=1
for i in range(1,k+1):
for value in layer[i]:
print(value,end=' ')
print()
layer마다 원소 사이 간격이 일정한 것을 찾을 수 있었다.
k= 트리 높이
n= layer 층 수
i= layer 층 내의 i번째 원소(인덱스 0이 첫번째 원소)
트리 높이가 k인 n번째 layer에서 i번째 원소의 순서 = 2**(k-n)+i*(2**(k-n+1))
즉, 높이가 5인 5번째 layer에서 1번째 원소의 순서 = 2**(5-5)+0*(2**(5-5+1)) = 1