ProblemSolve/항해99 코테스터디
99클럽 코테 스터디 8일차 TIL (미들러): [백준][Java] 2644 촌수계산 - 실버2
노루동산
2024. 11. 4. 15:26
문제 보기
https://www.acmicpc.net/problem/2644
풀이
어제 풀었던 문제와 거의 동일한 흐름이라 바로 풀어버렸다.
https://mountain-noroo.tistory.com/226
접근 방식은 동일하나 노드 사이에 거리가 주어지지 않으니
새 노드를 탐색할 때 무조건 1만 더하면 된다는 차이가 있다.
덕문에 8분 만에 문제를 풀었다.
코드도 어제 코드를 그대로 활용하였다.
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[] inputs = br.readLine().split(" ");
int start = Integer.parseInt(inputs[0]);
int end = Integer.parseInt(inputs[1]);
int M = Integer.parseInt(br.readLine());
List<Integer>[] list = new ArrayList[N+1];
for(int i = 1; i <= N; i++){
list[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
inputs = br.readLine().split(" ");
list[Integer.parseInt(inputs[0])].add(Integer.parseInt(inputs[1]));
list[Integer.parseInt(inputs[1])].add(Integer.parseInt(inputs[0]));
}
boolean[] visited = new boolean[N + 1];
visited[start] = true;
Queue<int[]> queue = new LinkedList<>();
for(int j = 0; j < list[start].size(); j++) {
queue.add(new int[]{list[start].get(j), 1});
}
while (!queue.isEmpty()) {
int[] node = queue.poll();
if(node[0] == end) {
bw.write(node[1] + "\n");
bw.flush();
bw.close();
return;
}
for(int j = 0; j < list[node[0]].size(); j++) {
if(!visited[list[node[0]].get(j)]) {
visited[list[node[0]].get(j)] = true;
queue.add(new int[]{list[node[0]].get(j), node[1] + 1});
}
}
}
bw.write("-1\n");
bw.flush();
bw.close();
}
}
GitHub 링크