백준

백준 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");
  }
}