반응형

https://www.acmicpc.net/problem/9934

 

9934번: 완전 이진 트리

상근이는 슬로베니아의 도시 Donji Andrijevci를 여행하고 있다. 이 도시의 도로는 깊이가 K인 완전 이진 트리를 이루고 있다. 깊이가 K인 완전 이진 트리는 총 2K-1개의 노드로 이루어져 있다. (아래

www.acmicpc.net

 

해결 방법 : 트리, 재귀

  • 입력으로 주어지는 방문 순서는 트리의 Inorder 순회 결과와 같다.
    • 주어지는 트리가 완전 이진 트리이기 때문에 방문 순서의 정 가운데가 root가 된다.
    • 양쪽으로 나누어진 방문 순서 리스트 또한 하나의 완전 이진 트리이며 위와 같이 생각 할 수 있다.
  • 따라서 "재귀 호출의 깊이 = 트리의 level"과 같다.
import sys
input = sys.stdin.readline

def solution(K, order):
    treeLevels = {i : [] for i in range(1, K+1)} # 트리 레벨 : 노드 번호 

    def devide(level, left, right): # 리스트를 양분하는 재귀 함수
        if left > right: return
        mid = (left + right) // 2 # 가운데 값 = 현재 트리의 root

        treeLevels[level].append(order[mid])

        devide(level + 1, left, mid - 1)
        devide(level + 1, mid + 1, right)

    devide(1, 0, len(order) - 1)

    answer = ''
    for n in treeLevels.values():
        temp = ' '.join(n)
        answer += temp + '\n'

    return answer

if __name__ == '__main__':
    K = int(input())
    order = list(input().strip().split())
    result = solution(K, order)
    print(result)
반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

백준 11728 : 배열 합치기(feat. Tim sort)  (0) 2021.06.09
백준 14916 : 거스름돈  (0) 2021.06.09
백준 1158 : 요세푸스 문제  (0) 2021.06.08
백준 문제 추천 리스트!  (0) 2021.06.08
백준 5430 : AC  (0) 2021.06.07

+ Recent posts