티스토리 뷰

문제

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

 

4256번: 트리

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 노드의 개수 n이 주어진다. (1 ≤ n ≤ 1,000) BT의 모든 노드에는 1부터 n까지 서로 다른 번호가 매겨져 있다. 다음

www.acmicpc.net

풀이

1. 전위 순위의 첫 번째 원소를 기준으로 중위 순위를 나눈다.

2. 전위 순위의 첫 번째 원소를 제거한다.

3. 중위 순위의 원소가 없을 때까지 1과 2의 과정을 반복한다

예를 들어 전위 순위 : 3 6 5 4 8 7 1 2 / 중위 순위 : 5 6 8 4 3 1 2 7 라고 한다면, 트리는 다음 과정으로 만들어진다.

매번 확정된 숫자(매번 전위 순위의 첫 번째 원소)를 동그라미 쳐주었다.

코드

def find_post_order(pre_order: list, in_order: list):
    if not in_order:
        return

    p = pre_order.pop(0)
    idx = in_order.index(p)

    find_post_order(pre_order, in_order[:idx])
    find_post_order(pre_order, in_order[idx + 1:])
    print(p, end=" ")


for _ in range(int(input())):
    n = int(input())
    pre_order = list(map(int, input().split()))
    in_order = list(map(int, input().split()))
    find_post_order(pre_order=pre_order, in_order=in_order)
    print()

'Problem Solving > 백준' 카테고리의 다른 글

백준 1005번 파이썬  (0) 2022.09.12
백준 10026번 파이썬  (0) 2022.07.03
백준 2263번 파이썬  (0) 2022.07.01
백준 3190번 파이썬  (0) 2022.06.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함