백준 25195번: Yes or yes (DFS)

컴순이·2024년 11월 7일

DFS는 stack과 재귀 방식으로 풀 수 있는데 나는 처음에 배울 때 재귀로 배워서 어디서 return할 지 더 어렵지만 자꾸 재귀로 푼다.

백준 25195번: Yes or yes 문제가 넘 귀엽..ㅋㅋ
팬을 만나면 다른 길을 찾아가고 (continue) 모든 길을 가봤으면 return False 하면 된다.
대신 중간에 팬을 안 만나고 끝까지 (더이상 간선이 없는 곳까지) 갔으면 return True한다.

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
    u, v = map(int, input().split())
    graph[u].append(v)
_ = input()		# 어차피 팬은 한 줄에 들어와서 파이썬은 s가 필요 없다
fan = set(map(int, input().split()))
visited = set([1])

def dfs(u):
    if u in fan:
        return False
    if not graph[u]:
        return True
    for v in graph[u]:
        if v not in visited:
            visited.add(v)
            if dfs(v):
                return True
    return False

if dfs(1):
    print('yes')
else:
    print('Yes')

그래서 이렇게 풀었는데.!!

백준의 파이썬 recursion 제한 때문에 이런 에러가..ㅎㅎ

파이썬 시간 제한 걸려서 input = sys.stdin.readline 쓰는 것도 억울한데 서럽다..
sys.setrecursionlimit(큰수)를 추가하면 해결된다. 난 10**6 썼다.
파이썬이 워낙 쉬워서 패널티라고 생각해야겠다.

profile
음음

0개의 댓글