💡문제접근
- 주어진 DFS 방문 순서대로 탐색을 할 수 있는지에 대해 묻는 문제였는데 일반적인 DFS 코드를 떠올려 인접 노드의 정점 방문 순서를 오름차순/내림차순 정렬을 수행한 결과를 각각 따로 구한 다음 주어진 DFS 방문 순서와 일치하면 1을 출력하는 방식으로 코드를 작성했지만 WA와 TLE를 수도 없이 반복했다.
- 위의 접근 방법에 문제가 있는지 확인하기 위해 질문게시판을 확인했는데
deque
자료구조를 사용해서 앞에서부터 노드를 받아와 해당 노드의 인접한 노드들에 대해 탐색을 진행하면서 만약 deque
가 비어있게 된다면 1을, 아니라면 False를 반환하는 방식의 코드가 눈에 띄었다. 해당 코드에 대해 숙지한 다음 코드를 작성했는데 정말 오랜 시간이 걸렸던 문제였다.
💡코드(메모리 : 280232KB, 시간 : 2852ms, PyPy3로 제출)
from collections import deque
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N = int(input())
graph = [[] for _ in range(N+1)]
visited = [False] * (N+1)
for _ in range(1, N):
a, b = map(int, input().strip().split())
graph[a].append(b)
graph[b].append(a)
def DFS(sequence, start):
element = sequence.popleft()
if not sequence:
print(1)
sys.exit(0)
visited[element] = True
for i in range(len(graph[element])):
if sequence[0] in graph[element] and not visited[sequence[0]]:
DFS(sequence, sequence[0])
return False
sequence = deque(map(int, input().strip().split()))
if sequence[0] != 1:
print(0)
sys.exit(0)
if not DFS(sequence, 1):
print(0)
💡소요시간 : 2h ↑