루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하는 문제.
# 26분 소요
- 사용 알고리즘 : Stack을 이용한 루트 노드 구하기
- Stack을 이용한 기본적인 코드로 아래 주석으로 설명을 대신한다.
Stack을 사용해 푼 파이썬 코드는 다음과 같다.
(아래 코드에서 stack만 queue로 바꿔 head부터 pop하면 BFS로 푼 코드가 된다.)
from sys import stdin
input = stdin.readline
def solve():
parentNode = {i: 0 for i in range(1, N+1)}
parentNode[1] = 1 # 루트 노드 1 방문 표시
stack = [1] # 스택에 담기
while stack:
x = stack.pop()
for nx in connectInfo[x]:
if parentNode[nx]: # 이미 방문했으면 넘기기
continue
parentNode[nx] = x # 부모 노드로 방문 표시
stack.append(nx) # 스택에 담기
# 출력
for i in range(2, N+1):
print(parentNode[i])
# main
N = int(input()) # 연결 정보 저장
connectInfo = {i: [] for i in range(1, N+1)}
for _ in range(N-1):
a, b = map(int, input().split())
connectInfo[a].append(b)
connectInfo[b].append(a)
solve()
- 시간 : 316ms / 메모리 : 152936kb(PyPy3 제출)
- 고찰 : 실버2 난이도. 스택과 큐로 간단하게 노드의 부모 노드 찾기 문제였다. Keep Going
'Problem Solving > boj' 카테고리의 다른 글
[BOJ] 3980. 선발 명단(Python) / DFS, Backtracking (0) | 2021.04.15 |
---|---|
[BOJ] 1941. 소문난 칠공주(Python) / DFS, Backtracking (0) | 2021.04.13 |
[BOJ] 1938. 통나무 옮기기(Python) / BFS (0) | 2021.04.11 |
[BOJ] 1525. 퍼즐(Python) / BFS (1) | 2021.04.11 |
[BOJ] 14425. 문자열 집합(Python) / Trie 자료구조 (0) | 2021.04.10 |