๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฌธ์ œํ’€์ด] ๋ฐฑ์ค€ 1697 ์ˆจ๋ฐ”๊ผญ์งˆ

by bamDal 2025. 2. 13.

 

 

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•ˆ ํ’€๋ฉด ๊นŒ๋จน๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

BFS/DFS๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์— ๋น„ํ•ด ๋งŽ์ด ํ’€์–ด๋ดค์–ด์„œ ์†์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ

ํ•œ ๋ฒˆ์— ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ^-^ ๋จธ์“ฑ

 

 

๋ฐฑ์ค€ 1697 ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ

์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ํŠน์ • ์ด๋™ ์กฐ๊ฑด์— ๋งž์ถฐ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ „ํ˜•์ ์ธ BFS ๋ฌธ์ œ์ธ ๋“ฏ ํ•˜๋‹ค.

 

< ์ด๋™ ์กฐ๊ฑด >

  • X - 1
  • X + 1
  • 2 * X

์ด๋™ ์กฐ๊ฑด์ด ๊ทœ์น™์ ์ด๋ฏ€๋กœ ํƒ์ƒ‰ ์œ„์น˜๊ฐ€ ๋ฐ˜๋ณต๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ฒ˜์Œ์— ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ๋นผ๋จน์€ ์ด์œ ๋Š”…..!

๊ทธ๋ƒฅ ์ž˜๋ชป ์ƒ๊ฐํ–ˆ๋‹ค.

์„ค๋ช…ํ•˜๊ธฐ๋„ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•ด์„œ ์ ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค..

๊ฒฐ๋ก ์€

ํŠน์ • ์ง€์ ์— ๋„์ฐฉํ–ˆ์„ ๋•Œ, ๊ทธ ์ง€์ ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜(3๊ฐ€์ง€ ์ด๋™ ์กฐ๊ฑด)๋Š” ํ•œ ๋ฒˆ์— ํ์— ๋„ฃ์–ด์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ณณ์— ๋‹ค์‹œ ๋Œ์•„์˜ฌ ํ•„์š”๊ฐ€ ์—†๋‹ค.

ํŠนํžˆ, ์ด ๋ฌธ์ œ๋Š” ์กฐ๊ฑด์ด X-1 ๊ณผ X+1 ์ด๋ผ์„œ ํ•œ ๋‹จ๊ณ„๋งŒ์—๋„ ๋ฐ˜๋ณต ๋ฐฉ๋ฌธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ) 5์—์„œ X-1 ์กฐ๊ฑด์œผ๋กœ ์ด๋™ํ•˜์—ฌ 4๋กœ ๊ฐ”๊ณ , 4์—์„œ X+1 ์กฐ๊ฑด์œผ๋กœ ์›€์ง์ด๋ฉด 5

๋ถˆํ•„์š”ํ•œ ํƒ์ƒ‰์ด๋ž„๊นŒ..?

์•„๋ฌดํŠผ ๋ฐฉ๋ฌธ์ฒดํฌ ๋„ฃ์–ด์„œ ์„ฑ๊ณตํ–ˆ๋‹ค.

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

public class Main { // BOJ_1697_์ˆจ๋ฐ”๊ผญ์งˆ

    static int n, k;
    static boolean[] visit = new boolean[100001];

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

        n = Integer.parseInt(st.nextToken()); // ์ˆ˜๋นˆ
        k = Integer.parseInt(st.nextToken()); // ๋™์ƒ

        bfs();
    }

    private static void bfs(){
        ArrayDeque<int[]> que = new ArrayDeque<>();
        que.offer(new int[] {n, 0});

        while (!que.isEmpty()){
            int[] tmp = que.poll();
            int cl = tmp[0]; //ํ˜„์žฌ ์œ„์น˜
            int ct = tmp[1]; //ํ˜„์žฌ ์‹œ๊ฐ„
            visit[cl] = true;

            if (cl == k){
                System.out.println(ct);
                break;
            }

            if (valid(cl-1)) {
                que.offer(new int[] {cl-1, ct+1});
            }
            if (valid(cl+1)) {
                que.offer(new int[] {cl+1, ct+1});
            }
            if (valid(cl*2)) {
                que.offer(new int[] {cl*2, ct+1});
            }
        }
    }

    private static boolean valid(int n){
        if(n < 0 || n > 100000 || visit[n]){
            return false;
        }
        return true;
    }
}

 

๊นจ๋‹ฌ์€ ์ 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข€ ๊พธ์ค€ํžˆ ํ’€์ž~^-^