๊ธฐ๋ก๋ฐฉ

BOJ_1463 : 1๋กœ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_1463 : 1๋กœ ๋งŒ๋“ค๊ธฐ

Soom_1n 2023. 3. 30. 22:35

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 106๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ •์ˆ˜ N์„ 1๋กœ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ์ ์€ ์—ฐ์‚ฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • ์—ฐ์‚ฐ์€ -1, /3, /2 ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
  • DP, DFS, BFS ๋ชจ๋‘ ํ’€์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ”ธ DP ๐Ÿ”ธ

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

public class Main {
    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        // DP
        int[] dp = new int[N+1];
        dp[1] = 0;
        for (int i = 2; i <= N; i++) {
            dp[i] = dp[i-1];
            if (i % 2 == 0) dp[i] = Math.min(dp[i], dp[i/2]);
            if (i % 3 == 0) dp[i] = Math.min(dp[i], dp[i/3]);
            dp[i]++;
        }

        // Output
        System.out.print(dp[N]);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • dp[n]์€ n์„ ๋งŒ๋“œ๋Š” ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜์ด๋‹ค.
    • N๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ณ„์‚ฐ ๊ฐ’์„ ๋ˆ„์ ํ•ด๊ฐ„๋‹ค.
    • ์„ธ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’ ์ค‘ ์ตœ์†Œ๊ฐ’ + 1 ์„ ํ˜„์žฌ ์œ„์น˜์— ์ €์žฅํ•œ๋‹ค.

๐Ÿ”ธ DFS ๐Ÿ”ธ

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

public class Main {
    private static int MIN = Integer.MAX_VALUE;
    private static void dfs(int d, int n) {
        if (MIN < d) return;
        if (n == 1) {
            MIN = Math.min(MIN, d);
            return;
        }
        if (n%3 == 0) dfs(d+1, n/3);
        if (n%2 == 0) dfs(d+1, n/2);
        dfs(d+1, n-1);
    }

    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        // DFS
        dfs(0, N);

        // Output
        System.out.print(MIN);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์žฌ๊ท€ ๋ฉ”์„œ๋“œ dfs์—์„œ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์„ 1์— ๋„๋‹ฌ ํ•  ๋•Œ ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ๋„๋‹ฌ ํ–ˆ์„ ๋•Œ์˜ ๊นŠ์ด๋ฅผ MIN์— ์ €์žฅํ•œ๋‹ค.
    • ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ MIN๋ณด๋‹ค ๊นŠ์–ด ์ง€๋Š” ๊ฒฝ์šฐ๋Š” ๋ณผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ”ธ BFS ๐Ÿ”ธ

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

public class Main {
    private static class Pair {
        int n, d;
        public Pair(int n, int d) {
            this.n = n;
            this.d = d;
        }
    }
    public static void main(String[] args) throws IOException {
        // Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        // BFS
        Queue<Pair> queue = new LinkedList<>();
        boolean[] visit = new boolean[N+1];

        queue.add(new Pair(N,0));

        int cnt = 0;
        while (!queue.isEmpty()) {
            Pair pair = queue.poll();

            if (pair.n == 1) {
                cnt = pair.d;
                break;
            }

            if (!visit[pair.n]) {
                visit[pair.n] = true;

                if (pair.n%3 == 0) queue.add(new Pair(pair.n/3, pair.d+1));
                if (pair.n%2 == 0) queue.add(new Pair(pair.n/2, pair.d+1));
                queue.add(new Pair(pair.n - 1, pair.d+1));
            }
        }

        // Output
        System.out.print(cnt);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • 3๊ฐ€์ง€ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ์— ๋ฐ˜๋ณต์ ์œผ๋กœ ๋„ฃ๋Š”๋‹ค.
  • ์ตœ์ดˆ๋กœ 1์— ๋„์ฐฉํ•œ ์ˆœ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๊ทธ๋•Œ์˜ ๊นŠ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์›๋ž˜ DP ์—ฐ์Šต์„ ์œ„ํ•œ ๋ฌธ์ œ์ง€๋งŒ, ์กฐ๊ฑด์ด ๋„ˆ๋ฌด ํƒ€์ดํŠธํ•˜์ง„ ์•Š์•„์„œ DFS์™€ BFS๋กœ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋‹จ, DFS์˜ ๊ฒฝ์šฐ ๋ฐฑํŠธ๋ž˜ํ‚น์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋ฌธ์ œ ๋ถ„์„๊ณผ ํ’€์ด ๊ณ„ํš์„ ์ ์–ด๊ฐ€๋ฉฐ ํ’€์ดํ–ˆ๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_10971 : ์™ธํŒ์› ์ˆœํšŒ 2  (0) 2023.04.06
BOJ_1010 : ๋‹ค๋ฆฌ ๋†“๊ธฐ  (0) 2023.04.06
BOJ_7662 : ์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ  (0) 2023.03.29
BOJ_5430 : AC  (0) 2023.03.28
BOJ_9019 : DSLR  (0) 2023.03.21