16964: DFS 스페셜 저지

ewillwin·2023년 6월 16일
0

Problem Solving (BOJ)

목록 보기
76/230

어렵,,

  • is_dfs랑 순서를 맞춰나가면서 dfs 순회를 해야함
  • 현재 노드, curr_node는 is_dfs.popleft()를 해서 할당해줌
  • 다음 노드는 is_dfs[0]
  • is_dfs의 모든 노드들을 출력한 경우 1을 출력하고 종료해줌
for i in range(len(adjacent[curr_node])):
		if not visit[is_dfs[0]] and is_dfs[0] in adjacent[curr_node]:
			dfs(is_dfs)
  • 이 부분에서 curr_node에 연결되어 있는 자식 노드의 개수만큼 반복해줘야함. 그래야 is_dfs의 원소가 단계에 맞게 popleft됨
import sys
from collections import deque
sys.setrecursionlimit(10**5)

def dfs(is_dfs):
	curr_node = is_dfs.popleft()
	visit[curr_node] = True
	if not is_dfs: #is_dfs의 모든 노드들을 출력한 경우 1 출력하고 종료
		print(1); exit(0)
	for i in range(len(adjacent[curr_node])): #curr_node에 연결되어 있는 자식 노드의 개수만큼 반복 -> 그래야 is_dfs의 원소가 단계에 맞게 popleft됨
		if not visit[is_dfs[0]] and is_dfs[0] in adjacent[curr_node]:
			dfs(is_dfs)
	return False

N = int(input())
adjacent = [[] for _ in range(N+1)]
for _ in range(N-1):
	t0, t1 = map(int, sys.stdin.readline()[:-1].split())
	adjacent[t0].append(t1)
	adjacent[t1].append(t0)
is_dfs = deque(list(map(int, sys.stdin.readline()[:-1].split())))

visit = [False] * (N+1)

if is_dfs[0] != 1:
	print(0); exit(0)
if not dfs(is_dfs):
	print(0)
  • setrecursionlimit을 10**5로 설정해주고, PyPy3으로 제출해서 겨우 통과함
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글