https://www.acmicpc.net/problem/24479

 

24479번: 알고리즘 수업 - 깊이 우선 탐색 1

첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양

www.acmicpc.net


내 풀이

 

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

+ Recent posts