๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 5014๋ฒˆ ์Šคํƒ€ํŠธ๋งํฌ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 8. 7.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 5014๋ฒˆ ์Šคํƒ€ํŠธ ๋งํฌ ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

5014๋ฒˆ: ์Šคํƒ€ํŠธ๋งํฌ

์ฒซ์งธ ์ค„์— F, S, G, U, D๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) ๊ฑด๋ฌผ์€ 1์ธต๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ , ๊ฐ€์žฅ ๋†’์€ ์ธต์€ F์ธต์ด๋‹ค.

www.acmicpc.net

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๊ฐ๊ฐ ์ธต ์ˆ˜๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

 

ํ˜„์žฌ ์ธต์—์„œ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ์ธต ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด 0์„ ์ถœ๋ ฅํ•˜๊ณ  ์—˜๋ ˆ๋ฒ ์ดํ„ฐ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” ํ˜„์žฌ ์ธต์—์„œ +u ํ•ด์ฃผ๊ณ  -d ๋ฅผ ํ•ด์ค€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ๋‹จ๊ณ„์—์„œ depth ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค์Œ depth ๋Š” ์ด์ „ depth + 1 ์ด์—ฌ์•ผ ํ•œ๋‹ค.

 

๋งŒ์•ฝ ์ดˆ๊ธฐ depth ๋ฅผ 1์œผ๋กœ ํ•˜๋ ค ํ•œ๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•  ๋•Œ -1 ์„ ์žŠ์ง€ ์•Š๋„๋ก ํ•˜์ž.

 

๊ทธ๋ฆฌ๊ณ  ์—˜๋ ˆ๋ฒ ์ดํ„ฐ๋กœ ๊ฐˆ ์ˆ˜ ์—†๋Š” ์ธต์ˆ˜์™€ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ๋ฅผ ํƒˆ ํ•„์š”๊ฐ€ ์—†๋Š” ์ธต์€ ๋ถ„๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String[] fsgud = br.readLine().split(" ");

        int f = Integer.parseInt(fsgud[0]); // ์ด ์ธต์ˆ˜
        int s = Integer.parseInt(fsgud[1]); // ์‹œ์ž‘ ์ธต
        int g = Integer.parseInt(fsgud[2]); // ๋ชฉํ‘œ ์ธต
        int u = Integer.parseInt(fsgud[3]); // ํ•œ ๋ฒˆ์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜
        int d = Integer.parseInt(fsgud[4]); // ํ•œ ๋ฒˆ์— ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ˆ˜

        int[] upAndDown = {u, -1 * d};

        int[] visited = new int[f + 1];

        Queue<Integer> queue = new LinkedList<>();

        queue.add(s);
        visited[s] = 1;

        while(!queue.isEmpty()) {
            int front = queue.remove();

            for (int i = 0; i < 2; i++) {

                int next = front + upAndDown[i];

                if(0 < next && next <= f) {
                    if(visited[next] == 0) {
                        visited[next] = visited[front] + 1;
                        queue.add(next);
                    }
                }
            }
        }

        if (visited[g] != 0) {
            bw.write(String.valueOf(visited[g] - 1));
        }
        else if(s == g) {
            bw.write("0");
        } else {
            bw.write("use the stairs");
        }

        bw.flush();
        bw.close();
    }
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€