ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)5014 - 스타트링크
    PS/boj 2020. 11. 2. 13:36
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    import java.io.*;
    import java.util.*;
     
    public class boj_5014 {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static StringTokenizer st;
        static Queue<int[]> q = new LinkedList<>();
        static boolean[] v;
        static int[] a;
        static int F, S, G, U, D, ans;
     
        public static void main(String[] args) throws IOException {
            input();
            solve();
            if (ans == -1System.out.println("use the stairs");
            else System.out.println(ans);
        }
     
        static void input() throws IOException {
            st = new StringTokenizer(br.readLine());
            F = Integer.parseInt(st.nextToken());
            S = Integer.parseInt(st.nextToken());
            G = Integer.parseInt(st.nextToken());
            U = Integer.parseInt(st.nextToken());
            D = Integer.parseInt(st.nextToken());
     
            v = new boolean[F + 1];
            a = new int[F + 1];
            ans = -1;
        }
     
        static void solve() {
            q.offer(new int[]{S, 0});
            v[S] = true;
     
            while (!q.isEmpty()) {
                int[] now = q.poll();
                int floor = now[0];
                int cnt = now[1];
     
                if (floor == G) { // 목표층 도달
                    ans = cnt;
                    break;
                }
     
                int up = floor + U;
                int down = floor - D;
     
                if (up <= F && !v[up]) {
                    v[up] = true;
                    q.offer(new int[]{up, cnt + 1});
                }
     
                if (down >= 1 && !v[down]) {
                    v[down] = true;
                    q.offer(new int[]{down, cnt + 1});
                }
            }
        }
    }
     
    cs

     

    - 현재 층부터 탐색 시작

    - 목표 층에 도달시 break;

    - 목표 층이 아닐 경우 up, down 두 가지 경우로 분류해서 큐가 빌때까지 offer 

     

     

     

     


    www.acmicpc.net/problem/5014

    'PS > boj' 카테고리의 다른 글

    boj)1707 - 이분그래프  (0) 2020.11.03
    boj)11724 - 연결 요소의 개수  (0) 2020.11.02
    boj)2146 - 다리 만들기  (0) 2020.11.02
    boj)13023 - ABCDE  (0) 2020.10.29
    boj)2206 - 벽 부수고 이동하기  (0) 2020.10.24
킹수빈닷컴