Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Algorithm

Baekjoon #5014 스타트링크 (java)

Kellyyyy 2021. 4. 8. 22:14

접근 방법

  1. BFS로 방문 가능한 층수 탐색
    1. 방문 가능이란 ?
      1. 방문한 적 없어야 한다.
      2. 현재층 + 위층버튼 ≤ 꼭대기층
      3. 현재층 - 아래버튼 ≥ 1층
    2. 스타트링크 층 도착 시 이동횟수 출력
  2. 더 이상 이동가능한 층이 없으면 use the stairs

소스 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    static BufferedReader br;
    static StringTokenizer st;
    static int F, S, G, U, D;
    static int[] visited;
    static int answer;
    public static void main(String[] args) throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        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());

        visited = new int[F + 1];
        answer = useElevator();
        if (answer == -1) {
            System.out.println("use the stairs");
        } else {
            System.out.println(answer-1);
        }
    }

    private static int useElevator() {
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(S);
        visited[S] = 1;

        while (!queue.isEmpty()) {
            int curFloor = queue.poll();

            if (curFloor == G) {
                return visited[curFloor];
            }

            if (curFloor + U <= F && visited[curFloor + U] == 0) {
                queue.offer(curFloor + U);
                visited[curFloor + U] = visited[curFloor] + 1;
            }

            if (curFloor - D > 0 && visited[curFloor - D] == 0) {
                queue.offer(curFloor - D);
                visited[curFloor - D] = visited[curFloor] + 1;
            }
        }
        return -1;
    }
}

출처

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