백준

[백준] 5014번: 스타트링크 - JAVA

doomole 2025. 2. 5. 16:14
728x90
 

문제

 



풀이

전체 층수(F), 스타트링크 위치(G), 강호의 위치(S), 엘리베이터의 올라가는 수(U), 엘리베이터의 내려가는 수(D)를 입력받는다.

F크기의 방문을 확인하는 Integer 배열을 만든다.

queue를 선언하고 S를 추가한다.

SG가 같다면 0을 출력한다.

queue가 비어있을 때까지 반복하며 queue에서 값(q)을 꺼낸다. 위로 이동하는 범위(S+U), 아래로 이동하는 범위(S-D)를 구한다.

UF의 값이 0보다 크고 최대층수보다 작거나 같고 0보다 크고 배열의 해당 위치에 방문한적이 없다면 queue에 추가한다.

qG와 같으면 배열의 q위치값을 출력한다.

이동할 수 있는 모든 층을 탐색하는 동안 같지 않으면 "use the stairs"를 출력한다.

 

 

 

정답 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static int F;
    static int S;
    static int G;
    static int U;
    static int D;
    static Queue<Integer> queue = new LinkedList<>();
    static int[] visited;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        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];
        queue.add(S);
        visited[S] = 0;

        if(S == G) {
            System.out.println(0);
            return;
        }

        bfs();

        if(visited[G] == 0) {
            System.out.println("use the stairs");
            return;
        }
    }

    static void bfs() {
        while(!queue.isEmpty()) {
            int q = queue.poll();

            if(q == G) {
                System.out.println(visited[q]);
                return;
            }
            int up = q + U;
            int down = q - D;
			
            // U가 0보다 크고 up이 최대층수보다 크지 않고 방문한적이 없다면
            if(U > 0 && up <= F && visited[up] == 0) {
                visited[up] = visited[q] + 1;
                queue.add(up);
            }
            // F가 0보다 크고 down이 0보다 크고 방문한적이 없다면
            if(F > 0 && down > 0 && visited[down] == 0) {
                visited[down] = visited[q] + 1;
                queue.add(down);
            }
        }
    }
}

 

 

문의사항이나 피드백은 댓글로 남겨주세요.

 

 

'백준' 카테고리의 다른 글

[백준] 2573번: 빙산 - JAVA  (0) 2025.02.05
[백준] 2468번: 안전 영역 - JAVA  (0) 2025.02.05
[백준] 1697번: 숨바꼭질 - JAVA  (0) 2025.02.05
[백준] 7569번: 토마토 - JAVA  (0) 2025.02.05
[백준] 2644번: 촌수계산 - JAVA  (1) 2025.02.05