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 |