9. 도미노(하)

View as PDF

Submit solution

Points: 10
Time limit: 1.0s
Memory limit: 64M

Author:
Problem type

도미노는 블록 하나를 넘어뜨리면 그 블록이 넘어지면서 다음 블록들을 넘어뜨리는 일이 연쇄적으로 반복되는 게임이다.

도미노간의 연결 관계가 주어지고 1번 도미노를 넘어뜨렸을 때, 몇 개의 도미노가 쓰러질지 알아내 보자.

하나의 블록에는 여러 개의 연결된 블록이 있을 수 있다.

입력

  • 첫 줄에는 도미노의 개수 \(N\), 연결 관계의 수 \(M\)이 주어진다.\((2 ≤ N ≤ 2000, 1 ≤ M ≤ 2000)\)
  • 다음 \(M\)개의 줄에는 \(a\) \(b\)가 주어진다. 이는 \(a\)블록을 넘어뜨렸을 때 \(b\)블록도 함께 넘어짐을 뜻한다. 블록의 번호는 \(1\)부터 \(N\)까지 매겨져 있다.

출력

  • 1번 도미노를 넘어뜨렸을 때 1번 도미노를 포함해 총 몇 개의 도미노가 넘어지는지 출력한다.

입력 예시 1

4 4
1 2
2 3
3 1
4 1

출력 예시 1

3

힌트

  • 이를 그래프로 표현한 뒤 1번 노드에서부터 탐색해 보자. BFS나 DFS 중 어떤 방법을 사용해도 무방하다.
  • 트리에서의 탐색과는 다르게, 그래프에서의 탐색은 이미 방문한 노드를 다시 방문하는 경우가 생긴다. 이를 막으려면 어떻게 해야 하는가?

Comments


  • 0
    S20174246  commented on Nov. 16, 2020, 8:51 p.m.

    도미노이기 때문에 노드의 연결이 쌍방향이 아닌 단방향인걸 생각을 못해 헤맸습니다.


    • 0
      mskang  commented on Nov. 19, 2020, 1:04 a.m.

      Good point!!


  • 0
    mskang  commented on Nov. 11, 2020, 11:42 p.m. edited

    전형적인 트리 탐색의 문제입니다. 그럼 우리는 하나 더 생각해야 합니다. 왜 이 문제가 트리 탐색에 적합할까? 이를 이해하면, 우리가 배운 트리 탐색 알고리즘 2개, BFS와 DFS, 이 중 어떤 것이 이 문제에 적합할까 찾을 수 있을 것이라 생각합니다.