[문제 링크]
https://www.acmicpc.net/problem/18352
[난이도]
- Silver 2
[알고리즘]
- BFS
[코드]
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int X = Integer.parseInt(st.nextToken());
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < N + 1; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
graph.get(u).add(v); // 단방향 간선
}
int[] distance = new int[N + 1];
Arrays.fill(distance, -1);
distance[X] = 0;
Queue<Integer> queue = new LinkedList<>();
queue.add(X);
while (!queue.isEmpty()) {
int current = queue.poll();
for (int next : graph.get(current)) {
if (distance[next] == -1) { // 방문한 노드와 방문하지 않는 노드를 체크하는 용도로 사용
distance[next] = distance[current] + 1; // 전 노드까지의 거리 + 1
queue.add(next);
}
}
}
boolean found = false;
for (int i = 1; i <= N; i++) {
if (distance[i] == K) { // 거리가 K인것만 출력
System.out.println(i);
found = true;
}
}
if (!found) {
System.out.println(-1);
}
}
}
[풀이]
이중 list로 노드와 간선을 구성하고 큐로 시작노드와 연결된 노드를 찾으며 거리를 계산한다.
'코딩테스트' 카테고리의 다른 글
백준 2589 : 보물섬 [JAVA] (0) | 2024.06.15 |
---|---|
백준 1389 : 케빈 베이컨의 6단계 법칙 [JAVA] (0) | 2024.06.14 |
백준 11725 : 트리의 부모 찾기 [JAVA] (1) | 2024.06.13 |
백준 1932 : 정수 삼각형 [JAVA] (0) | 2024.06.12 |
백준 11055 : 가장 큰 증가하는 부분 수열2 [JAVA] (0) | 2024.06.12 |