BOJ 5014번 스타트링크 ( BFS ) JAVA
풀이
BFS를 이용하여 문제를 해결한다.
# DFS로 해결하면 시간 초과 -> 최단 경로는 BFS를 이용해서 구하는 게 효율적임.
# BFS를 사용할 때는 값을 넣음과 동시에 visited를 true로 변경해줘야 한다. ( poll할 때, 넣어주면, 중복이 일어남 )
링크
https://www.acmicpc.net/problem/5014
소스 코드
package boj;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Boj5014 {
static int s, g, f, u, d;
public static class Node {
int stair, cnt;
public Node(int stair, int cnt) {
this.stair = stair;
this.cnt = cnt;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
f = sc.nextInt();
s = sc.nextInt();
g = sc.nextInt();
u = sc.nextInt();
d = sc.nextInt();
boolean[] visited = new boolean[f + 1];
int res = bfs(visited);
if (res < 0)
System.out.println("use the stairs");
else
System.out.println(res);
}
public static int bfs(boolean[] visited) {
Queue<Node> q = new LinkedList<>();
q.add(new Node(s, 0));
visited[s] = true;
while (!q.isEmpty()) {
Node node = q.poll();
int cur = node.stair;
if (cur == g)
return node.cnt;
if (cur + u <= f && !visited[cur + u]) {
q.add(new Node(cur + u, node.cnt + 1));
visited[cur + u] = true;
}
if (cur - d >= 1 && !visited[cur - d]) {
q.add(new Node(cur - d, node.cnt + 1));
visited[cur - d] = true;
}
}
return -1;
}
}
'Algorithm' 카테고리의 다른 글
BOJ 2589번 보물섬 ( BFS, Brute Force ) JAVA (0) | 2021.04.08 |
---|---|
BOJ 1949번 우수 마을 ( DP, DFS ) JAVA (0) | 2021.04.07 |
BOJ 2169번 로봇 조종하기 ( DP ) JAVA (0) | 2021.04.06 |
BOJ 2098번 외판원 순회 ( DP ) JAVA (0) | 2021.04.05 |
BOJ 5557번 1학년 ( DP ) JAVA (0) | 2021.04.05 |