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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 1697๋ฒˆ ์ˆจ๋ฐ”๊ผญ์งˆ ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 7. 29.

๋ฌธ์ œ

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

 

1697๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ

www.acmicpc.net

 

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

 

๋ฌธ์ œ ์ ‘๊ทผ

 

์ด ๋ฌธ์ œ๋Š” BFS ์™€ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

 

bfs๋กœ ๊ฐ๊ฐ์˜ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ํ™•์ธ์„ ํ•œ๋‹ค.

 

  1. ํ˜„์žฌ ๊ฑฐ๋ฆฌ์—์„œ - 1 ํ•œ ๊ฒฝ์šฐ
  2. ํ˜„์žฌ ๊ฑฐ๋ฆฌ์—์„œ + 1 ํ•œ ๊ฒฝ์šฐ
  3. ํ˜„์žฌ ๊ฑฐ๋ฆฌ์—์„œ * 2 ํ•œ ๊ฒฝ์šฐ

 

๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ queue ์— ๋„ฃ๊ณ  bfs ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

 

์ตœ๋‹จ ์‹œ๊ฐ„์€ queue ์— ๋„ฃ์„ ๋•Œ๊ฐ€ ๊ฐ€์žฅ ์ตœ๋‹จ์˜ ์‹œ๊ฐ„ ์ด๋ผ๊ณ  ๋ณด๊ณ  ํ•ด๋‹น ์‹œ๊ฐ„์—์„œ + 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[] nk = br.readLine().split(" ");

        int n = Integer.parseInt(nk[0]);
        int k = Integer.parseInt(nk[1]);

        ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
        int[] visited = new int[100_001];

        for (int i = 1; i < 100_001; i++) {
            graph.add(new ArrayList<>());
        }

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

        visited[n] = 0;
        queue.add(n);

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

            if(front == k) {
                System.out.println(visited[front]);
                break;
            }

            int[] next = {front + 1, front - 1, front * 2};

            for (int i = 0; i < next.length; i++) {
                if(0 <= next[i] && next[i] <= 100_000) {
                    if(visited[next[i]] == 0) {
                        visited[next[i]] = visited[front] + 1;
                        queue.add(next[i]);
                    }
                }
            }
        }

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

 


 

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

๋Œ“๊ธ€