알고리즘||코딩테스트/백준

[백준 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