Notice
Recent Posts
Recent Comments
Link
CodeClover
[JAVA] 백준 18352_특정 거리의 도시 찾기 본문
[문제링크]
https://www.acmicpc.net/problem/18352


📌 문제 탐색하기
어떤 나라에 N개의 도시와 M개의 거리가 1인 단방향 도로가 있다.
출발 도시 X에서 최단 거리가 정확히 K인 모든 도시를 찾아 오름차순으로 출력하는 문제이다.
만약 존재하지 않으면 -1을 출력
📌코드 설계하기
1. 입력 받기
2. 그래프 저장
3. BFS로 최단 거리 계산
4. 거리 K인 도시 찾기
5. 결과 출력하기
(오름차순 정렬 후 출력 / 없으면 -1)
📌 가능한 시간복잡도
BFS의 시간복잡도는 모든 도로를 각각 한번씩 탐색하기 때문에
가능한 시간복잡도는 O(N+M)입니다.
📌 정답 코드
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; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
graph.get(A).add(B);
}
int[] distance = new int[N + 1];
Arrays.fill(distance, -1);
distance[X] = 0;
Queue<Integer> queue = new LinkedList<>();
queue.offer(X);
while (!queue.isEmpty()) {
int current = queue.poll();
for (int next : graph.get(current)) {
if (distance[next] == -1) {
distance[next] = distance[current] + 1;
queue.offer(next);
}
}
}
List<Integer> result = new ArrayList<>();
for (int i = 1; i <= N; i++) {
if (distance[i] == K) {
result.add(i);
}
}
if (result.isEmpty()) {
System.out.println(-1);
} else {
Collections.sort(result);
for (int city : result) {
System.out.println(city);
}
}
}
}'코딩테스트' 카테고리의 다른 글
| [JAVA] 백준 1251_단어 나누기 (2) | 2025.04.09 |
|---|---|
| [JAVA] 백준 4592_중복을 없애자 (0) | 2025.04.07 |
| [JAVA] 백준 1713_후보 추천 (0) | 2025.02.13 |
| [JAVA] 백준 5212_지구온난화 (0) | 2025.02.12 |
| [JAVA] 백준 좌석 10157_배정 시뮬레이션 (0) | 2025.02.11 |