https://www.acmicpc.net/problem/9934
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
'알고리즘||코딩테스트 > 백준' 카테고리의 다른 글
[백준 24444번] 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2023.06.26 |
---|---|
[백준 24479번] 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2023.06.26 |
1991번 트리 순회(Silver1) (0) | 2023.06.23 |
14244번 트리 만들기 (Silver4) (0) | 2023.06.23 |
1806번 부분합(Gold4) (0) | 2023.06.23 |