https://www.acmicpc.net/problem/24479
내 풀이
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 8)
def solution():
n,m,r = map(int,input().split())
graph = [[] for _ in range(n+1)]
visited =[0] * (n+1)
for _ in range(m):
a,b = map(int,input().split())
graph[a].append(b)
graph[b].append(a)
count = 1
def dfs(v):
nonlocal count
visited[v] = count
graph[v].sort()
for g in graph[v]:
if visited[g]==0:
count +=1
dfs(g)
dfs(r)
for i in range(1,n+1):
print(visited[i])
solution()
배워갈게 많은 문제라고 생각한다.
sys.setrecursionlimit(10 ** 8)
코딩 테스트 중 dfs 문제를 처음 볼 때 흔히 걸리는 런타임 에러를 잡기 위한 필수적인 라인이다.
파이썬의 기본 재귀 제한은 상당히 작은편이다. dfs 문제를 파이썬으로 풀때는 무조건, 무조건 쓰고 시작해야한다.
이번 풀이하면서 좀 헷갈렸던게 nonlocal과 global이다.
이번 풀이로 확실하게 배웠다.
전역변수를 활용할때는 global
지역변수를 활용할때는 nonlocal
다른사람의 풀이
'취준 > 백준' 카테고리의 다른 글
2606 - 파이썬 (0) | 2022.07.13 |
---|---|
24445 - 파이썬 (0) | 2022.07.11 |
18352 - 파이썬 (0) | 2022.07.07 |
2178 - 파이썬 (0) | 2022.07.05 |
2004 - 백준 (0) | 2022.05.11 |