깊이 우선 탐색 예제 - 1

문제 분석

  • 노드의 최대 개수가 1,000이므로 시간 복잡도 N^2이하의 알고리즘을 모두 사용할 수 있다.

  • 연결 요소는 에지로 연결된 노드의 집합이며, 한 번의 DFS가 끝날 때까지 탐색한 모든 노드의 집합을 하나의 연결 요소로 판단할 수 있다.

손으로 풀어보기

  1. 그래프를 인접 리스트로 저장하고 방문 리스트도 초기화한다. 방향이 없는 그래프이기 때문에 양쪽 방향으로 에지를 모두 저장한다.

img_3.png
  1. 임의의 시작점에서 DFS를 수행한다.

img_4.png
  1. 아직 방문하지 않은 노드가 있으면 시작점을 다시 정해 탐색을 진행한다. 모든 노드를 방문하면 전체 탐색을 종료한다.

  2. DFS 수행 횟수가 정답이 된다.

슈도코드

코드 구현 - 파이썬

  • sys.setrecursionlimit(10000) : 재귀함수의 최대 깊이를 10,000으로 설정한다.

    • 파이썬에서 기본 설정이 1,000 정도이다.

    • DFS나 재귀관련 문제를 풀 때 해당 제한으로 예외가 발생하는 경우가 있다.

코드 구현 - 자바

Last updated