Submit solution
Points:
10
Time limit:
1.0s
Java 8
2.0s
Python
2.0s
Memory limit:
64M
Java 8
128M
Python
128M
Author:
Problem type
네모바지 스폰지밥의 '캠핑은 즐거워'편을 보면 다음과 같은 대사가 나온다.
스폰지밥: 뚱이 말이 맞아. 바다곰을 우습게 보지 말라구. 내가 어떤 남자를 만났는데, 그 사람의 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 또 아는 사람의 그 사람의 또 아는 사람의 옆집 사람의 또 아는 사람의 또 아는 사람의...
이를 듣고 있던 징징이는 심기가 매우 불편하다. 왜냐하면 스폰지밥이 불필요하게 많이 "아는 사람의 "를 외친다고 생각했기 때문이다.
스폰지밥이 최소의 횟수만큼 "아는 사람의 "를 외칠 수 있도록 도와주자.
\(N\)명의 사람에 대한 아는 사람 관계가 주어질 때, 사람 \(p\)가 최소 몇 번의 아는 사람 관계를 거쳐야 사람 \(q\)에 도달할 수 있는지 알아내는 프로그램을 작성하시오.
입력
- 첫째 줄에 사람의 수 \(N\), 아는 사람 관계의 수 \(M\)이 주어진다.\((2 ≤ N ≤ 2000, 1 ≤ M ≤ 10000)\)
- 그 다음 줄부터 \(M\)개의 줄에 \(a, b\)가 주어진다. 이는 \(a\)와 \(b\)가 서로 아는 사람이라는 뜻이다.\((1 ≤ a ≤ N, 1 ≤ b ≤ N, a ≠ b)\)
- 그 다음 줄에 \(p\)와 \(q\)가 주어진다.\((1 ≤ p ≤ N, 1 ≤ q ≤ N, p ≠ q)\)
출력
- \(p\)와 \(q\)가 아무런 관계가 없는 경우, "모르는 사람"을 출력한다.
- \(p\)에서 \(q\)까지 도달하기 위해 최소 \(n\)번의 아는 사람 관계를 거쳐야 하는 경우 \(n-1\)번의 "아는 사람의 "를 출력하고 나서 "아는 사람"을 출력한다.
입력 예시 1
4 3
1 2
1 3
3 4
3 1
출력 예시 1
아는 사람
입력 예시 2
4 3
1 2
1 3
3 4
2 4
출력 예시 2
아는 사람의 아는 사람의 아는 사람
입력 예시 3
4 2
1 2
3 4
1 4
출력 예시 3
모르는 사람
입력 예시 4
7 8
1 2
1 3
1 4
2 5
3 6
4 7
5 6
6 7
1 6
출력 예시 4
아는 사람의 아는 사람
예시 4 힌트
힌트
- Java의 경우 BufferedWriter를 사용하여 유니코드를 출력할 수 있다. 다른 언어는 기본 입출력 그대로 사용해도 된다.
- 이 문제는 가중치가 없는 그래프의 최단 경로를 구하는 문제로서, DFS를 사용할 수 없는 문제이다. 기존에 구현했던 간단한 BFS에서 depth별로 구분하는 과정만 추가하면 된다.
Comments
https://velog.io/@skyepodium/BFS%EB%8A%94-%EB%82%AF%EC%84%A4%EC%96%B4%EC%84%9C 블로그에 문제관련 설명이 잘되어있습니다.
컴파일러가 한글을 인식못하는거같습니다 테스트 케이스가 전부 ???? 로만 출력됩니다
자바의 System.out.print의 유니코드 인코딩 방식이 다른 것 같으니 BufferedWriter를 사용해 보세요.