백준 5014 스타트링크 (Java,자바)

jonghyukLee·2022년 4월 25일
0

이번에 풀어본 문제는
백준 5014번 스타트링크 입니다.

📕 문제 링크

❗️코드

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

class KH
{
    int loc,cnt;

    public KH(int loc, int cnt) {
        this.loc = loc;
        this.cnt = cnt;
    }
}
public class Main {
    static int [] move = new int[2];
    static boolean [] visited;
    static int F;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        F = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int G = Integer.parseInt(st.nextToken());
        int U = Integer.parseInt(st.nextToken());
        int D = Integer.parseInt(st.nextToken());

        move[0] = U;
        move[1] = -D;
        visited = new boolean[F+1];

        Queue<KH> q = new LinkedList<>();
        q.add(new KH(S,0));
        visited[S] = true;

        int answer = 0;
        boolean isDone = false;
        while(!q.isEmpty())
        {
            KH cur = q.poll();

            if(cur.loc == G)
            {
                isDone = true;
                answer = cur.cnt;
                break;
            }
            for(int idx = 0; idx < 2; idx++)
            {
                int next = cur.loc + move[idx];
                if(!isValid(next) || visited[next]) continue;
                visited[next] = true;
                q.add(new KH(next,cur.cnt+1));
            }
        }
        System.out.print(isDone ? answer : "use the stairs");
    }
    static boolean isValid(int x)
    {
        return x > 0 && x <= F;
    }
}

📝 풀이

목표 층까지 엘리베이터를 타고 이동하는데, 최소 이동 횟수를 구하는 문제입니다. bfs탐색을 활용하여 U,D 만큼 강호를 이동시키고 G에 도달했을 때 카운트값을 출력하면 됩니다. answer 값이 초기값과 같을 경우를 도달하지 못했다고 판단할 수 있지만, S와 G값이 동일한 경우가 존재하므로 boolean 타입의 변수를 통해 flag로 활용했습니다.

📜 후기

간단하고 재밌는 그래프탐색 문제였습니다!^^

profile
머무르지 않기!

0개의 댓글