알고리즘

백준 10917번 Your life (JAVA)

박카스마시며코딩 2023. 8. 31. 19:47

https://www.acmicpc.net/problem/10917

 

10917번: Your life

당신이 꿈을 이루는 과정 중에 일어날 수 있는 수많은 상황들의 관계를 그래프로 나타내어 보겠다. 많은 상황을 압축해서 N개의 상황이 일어날 수 있다고 하고 1번에서 N까지의 번호를 붙였다.

www.acmicpc.net

 

저는 BFS를 통해 문제를 해결하였습니다.

시작점(1)부터 시작하여 bfs로 진행하면서 n까지 도달할 수 있는지 도달한다면 해당 time은 몇인지를 판단하여 문제를 해결하였습니다.

 

 

package BOJ.bfs;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_10917 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(st.nextToken());
        int m = stoi.apply(st.nextToken());
        List<Integer>[] list = new List[n+1];
        for(int i = 0 ; i <= n ; i++){
            list[i] = new LinkedList<>();
        }
        for(int i = 0 ; i < m ; i++){
            st = new StringTokenizer(br.readLine());
            int a = stoi.apply(st.nextToken());
            int b = stoi.apply(st.nextToken());
            list[a].add(b);
        }
        int result = bfs(list,n);
        System.out.println(result);
    }
    private static final int START = 1;
    private static final int NOT_FOUND = -1;
    private static int bfs(List<Integer>[] list, int n) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(START);
        boolean[] visited = new boolean[n+1];
        visited[START] = true;
        int time = 0;
        while(!q.isEmpty()){
            int qSize = q.size();
            for(int s = 0 ; s < qSize ; s++){
                int now = q.poll();
                if(now == n){
                    return time;
                }
                for(int next : list[now]){
                    if(!visited[next]){
                        q.offer(next);
                        visited[next] = true;
                    }
                }
            }
            time++;
        }
        return NOT_FOUND;
    }
}

'알고리즘' 카테고리의 다른 글

백준 25195번 Yes or yes (JAVA)  (0) 2023.09.02
백준 11726번 2Xn타일링 (JAVA)  (0) 2023.09.01
백준 1662번 압축 (JAVA)  (0) 2023.08.30
백준 14677번 병약한 윤호 (JAVA)  (0) 2023.08.29
백준 17413번 단어 뒤집기2 (JAVA)  (0) 2023.08.28