쌓고 쌓다

[백준] 특정 거리의 도시 찾기 자바(Java) 풀이 및 해설 본문

알고리즘/백준

[백준] 특정 거리의 도시 찾기 자바(Java) 풀이 및 해설

승민아 2024. 5. 23. 09:22

https://www.acmicpc.net/source/78693009

 

풀이 방법

BFS를 이용한다.

노드 방문시

X노드부터 방문 노드까지의 거리가 담긴 dis에 담긴 거리가 K와 동일하다면 답에 추가한다.

 

전체 코드

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String[] args) throws IOException {
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] inputs = (reader.readLine()).split(" ");
        int N = Integer.parseInt(inputs[0]);
        int M = Integer.parseInt(inputs[1]);        
        int K = Integer.parseInt(inputs[2]);
        int X = Integer.parseInt(inputs[3]);
        
        List<Integer>[] arr = new ArrayList[N+1];
        for(int i=0; i<arr.length; i++) {
            arr[i] = new ArrayList<Integer>();
        }
        
        for(int i=0; i<M; i++) {
            String[] str = reader.readLine().split(" ");
            int A = Integer.parseInt(str[0]);
            int B = Integer.parseInt(str[1]);
            arr[A].add(B);   
        }
        
        int[] dis = new int[N+1];
        Arrays.fill(dis, -1);
        List<Integer> answer = new ArrayList<>();
        Queue<Integer> q = new LinkedList<>();
        q.offer(X);
        dis[X] = 0;
        
        while(q.size() != 0) {
            int cur = q.poll();
            
            if(dis[cur] == K)
                answer.add(cur);     
            
            for(int i=0; i<arr[cur].size(); i++) {
                if( arr[cur].get(i) != X && dis[arr[cur].get(i)] == -1) {
                    q.offer(arr[cur].get(i));
                    dis[arr[cur].get(i)] = dis[cur] + 1;
                }
            }
        }
        
        if(answer.size() == 0) {
            System.out.print("-1");
        } else {
            answer.sort((o1, o2) -> {
                return o1 - o2;
            });
            
            for(int i=0; i<answer.size(); i++) {
                    System.out.println(answer.get(i));
            }
        }
        
        
    }
}
Comments