백준
백준 5014 스타트링크(Java)
Park DJ
2023. 2. 18. 21:02
https://www.acmicpc.net/problem/5014
5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net

Java 코드
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
public class Main {
static int f;
static int u;
static int d;
static StringBuilder sb = new StringBuilder();
static Queue<Integer> q;
static int[] visit;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
f = sc.nextInt();
int s = sc.nextInt();
int g = sc.nextInt();
u = sc.nextInt();
d = sc.nextInt();
visit = new int[f + 1];
bfs(s, g);
System.out.println(sb);
}
public static void bfs(int s, int g) {
q = new LinkedList<>();
visit[s] = 1;
q.add(s);
while(!q.isEmpty()) {
int num = q.poll();
if(num == g) {
sb.append(visit[num] - 1);
return;
}
int up = num + u;
int down = num - d;
if(up >= 1 && up <= f && visit[up] == 0) {
q.add(up);
visit[up] = visit[num] + 1;
}
if(down >= 1 && down <= f && visit[down] == 0) {
q.add(down);
visit[down] = visit[num] + 1;
}
}
if(visit[g] == 0) sb.append("use the stairs");
}
}