DFS 문제 하나 여쭤봅니다!..
강의를 들어보다가 백준 - 16964번 DFS 스페셜 저지 문제를 풀어 보았는데 여러개의 답이 나올 수 있는 경우를 특정하기가 어려줘 질문 남겨봅니다!..
graph에서 순차적으로 나오는 경우는 답을 구할 수 있는데 그래프에서 랜덤한 방향으로 진행될 시 어떻게 해야되는지 궁금합니다!..
제가 짜본 기본 코드입니다..ㅜㅜ 도움 부탁드립니다!
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
# 함수
def dfs(idx):
global visited, answer, graph, order
visited[idx] = True
answer[idx] = order
order += 1
for i in graph[idx]:
if not visited[i]:
dfs(i)
# 0. 입력 조건
N = int(input())
visited = [False] * (N+1)
answer = [0] * (N+1)
order = 1
graph = [[] for _ in range(N+1)]
# 1. 그래프 받아오기
for _ in range(N-1):
x, y = map(int, input().split())
graph[x].append(y)
graph[y].append(x)
# 2. dfs 수행
dfs(1)
# 3. 출력하기
given = list(map(int, input().split()))
# answer.sort()
answer = answer[1:]
if given == answer:
print(1)
else:
print(0)
답변 1
1
안녕하세요! 해당 문제는 DFS를 정확히 이해해야 되기도 했지만, 한 노드를 기준으로 갈 수 있는 자식 노드들을 순서와 관계없이 구분할 방법도 필요했습니다. 그래서 무조건 정답이 뭔지를 찾거나, 작성하신 대로 모든 경우의 수를 다 따지면 시간 초과가 발생할 것 같아요!
그래서 필요한 것은 각 노드를 루트로 하는 서브트리의 크기를 게산하고, 각 노드의 높이(레벨)를 계산해야 됐습니다. 그래서 문제에서 주어진 정답이 순서와 관계 없이 정답이 될 수 있는지 서브트리 수준에서 판단이 필요했던 것으로 보입니다!
샘플 정답은 이걸 참고하시면 될 것 같습니다!
import sys
N = int(sys.stdin.readline())
graph=[[] for _ in range(N+1)]
for _ in range(N-1):
a,b=map(int,sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
ans= list(map(int,sys.stdin.readline().split()))
level=[False]*(N+1)
tsize = [0]*(N+1)
visited = [False]*(N+1)
def dfs(x,lv):
if visited[x]:
return 0
visited[x]=True
size=1
level[x]=lv
for i in range(len(graph[x])):
next =graph[x][i]
size+=dfs(next,lv+1)
tsize[x]=size
return size
if ans[0]!=1:
print("0")
sys.exit(0)
else:
dfs(1,0)
for i in range(1,N):
x=ans[i]
if tsize[x] == 1 or i + tsize[x] >=N:
continue
next = ans[i+tsize[x]]
if level[next]>level[x]:
print(0)
sys.exit(0)
print(1)
itertools, sys같은 STL을 사용할 수 없는 경우 질문드립니다.(백준 11724)
1
32
1
백준 13565 침투 질문
1
92
2
침투/섬개수 질문
1
138
2
재귀함수 질문
1
144
1
백준 1260 (DFS 와 BFS) 프린트 위치 질문
1
122
1
촌수계산(백준 2644) 질문
1
186
2
다른 주제 강의
1
137
2
graph
1
197
1
재귀 함수 Depth
1
181
1
백준 DFS
1
217
1
[바닥장식][런타임에러] 질문 있습니다.
1
292
3
그래프 짤 때 adjacency matrix vs adjacency list
1
393
2
2644문제(촌수 구하기) 질문입니다.
1
251
2
다음강의
1
245
1
알고리즘 수업 - 깊이 우선 탐색 2( 백준 24480) 번 질문
1
285
1
1260 문제 풀이에서는 함수 global로 변수 선언
2
212
1
PyPy3와 Python3
1
332
1
백준 2606
1
216
1
22479번 문제 런타임 에러 도와주세요 ㅠㅠ
1
439
1
11724 문제 질문
1
305
2
그래프 초기화
1
282
1
선생님! 바이러스 문제 코드 질문있어요오
1
276
2
질문있습니다!
1
332
1
2644 촌수계산 문제에 관한 질문
1
238
1





