๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

1463 - 1๋กœ ๋งŒ๋“ค๊ธฐ

๋ฌธ์ œ: boj.kr/1463
๋‚ ์งœ: 08/29 (๋ชฉ)
์„ฑ๊ณต์—ฌ๋ถ€: O (00:37:07)

 

์‹ค๋ฒ„3์˜ DP ๋ฌธ์ œ์ด๋‹ค.

 

  1. x๊ฐ€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด 3์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
  2. x๊ฐ€ 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด 2๋กœ ๋‚˜๋ˆˆ๋‹ค.
  3. 1์„ ๋บ€๋‹ค.

 

์ •์ˆ˜ x์— ๋Œ€ํ•ด์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 3๊ฐ€์ง€ ์—ฐ์‚ฐ์ธ๋ฐ, ๋ญ”๊ฐ€ ์—ฐ์‚ฐ์˜ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์„œ ์ˆœ์„œ๋ฅผ ์ง€์ผœ์„œ ํ’€๋ ค๊ณ  ํ•˜๋ฉด ํ‹€๋ฆฐ๋‹ค. ์œ„์˜ 3๊ฐ€์ง€ ์—ฐ์‚ฐ์€ 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜์ด๊ณ  ์ •์ˆ˜ x์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ๋ชจ๋‘ ์ ์šฉ์‹œ์ผœ์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ผ๋Š” ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์™„ํƒ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ์„๊นŒ? ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์•„์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” 100๋งŒ๊ฐœ์˜ ์ˆซ์ž์— ๋Œ€ํ•ด์„œ 3๊ฐœ์˜ ์—ฐ์‚ฐ์„ ํ•˜๋ฏ€๋กœ 3^100์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทผ๋ฐ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์ด 0.15์ดˆ์ด๋ฏ€๋กœ ๋ฌด์กฐ๊ฑด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚  ๊ฒƒ์ด๋‹ค.. ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ๊นŒ? ๊ฒฐ๋ก ์€ DP์ด๋‹ค. ์™œ๋ƒ๋ฉด 3์œผ๋กœ ๋‚˜๋ˆ„๋“  2๋กœ ๋‚˜๋ˆ„๋“  1์„ ๋นผ๋“  ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž๊ฐ€ ๋ฐœ์ƒ์„ ํ•œ๋‹ค.

 

12 -> 4 -> 2 -> 1

12 -> 6 -> 2 -> 1

 

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ด๊ธด ํ•œ๋ฐ, 12๋ฅผ 1๋กœ ๋งŒ๋“œ๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ณด๋ฉด ์ค‘๊ฐ„์— 2๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” DP์˜ ์ค‘๋ณต ๋ถ€๋ถ„ ๋ฌธ์ œ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋ฉฐ DP ์ž์ฒด๊ฐ€ ์™„ํƒ์„ ํ•˜๋Š” ๊ฒƒ์— ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ธฐ์ˆ ์„ ์ด์šฉํ•œ ๊ธฐ๋ฒ•์ด๋ฏ€๋กœ ์ด๋ฅผ ํ™œ์šฉํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด๋ณด์ž.

 

์ผ๋‹จ ์•„๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” O(1)์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ฌธ์ œ๋Š” 1์ด ๋˜๋Š” ์ตœ์†Œ ์—ฐ์‚ฐํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š”๊ฑด๋ฐ ๋งŒ์•ฝ ์ž…๋ ฅ์ด 1์ด๋ฉด ์—ฐ์‚ฐ์„ ์•ˆํ•ด๋„ ๋˜๋ฏ€๋กœ 0์ด ๋‹ต์ด๋œ๋‹ค. ๊ทธ๋Ÿผ ์šฐ๋ฆฐ dp[1] = 0; ์ด๋ผ๋Š” ๋‹ต์„ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‹ˆ ์ด๋ฅผ ์‹œ์ž‘์œผ๋กœ 2๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๋‹ต์„ ๊ตฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์™œ๋ƒ๋ฉด 1,2,3 ์—ฐ์‚ฐ์ด ๋ชจ๋‘ 1~n ๋ฒ”์œ„ ๋‚ด ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— 2๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ด์šฉํ•ด O(1)๋กœ ์ ‘๊ทผํ•˜์—ฌ ๋‹ต์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿผ ์ด O(N)์ด๋ผ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฆ‰, 100๋งŒ์— ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

 

์ฝ”๋“œ

import java.io.*;

public class Main {
    // ์‹œ๊ฐ„์ œํ•œ 0.15์ดˆ, ๋ฉ”๋ชจ๋ฆฌ์ œํ•œ 128MB
    static int[] dp;
    static int n;

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

        dp[1] = 0;
        for (int i = 2; i <= n; i++) {
            dp[i] = Integer.MAX_VALUE;
            if (i % 3 == 0) dp[i] = Math.min(dp[i], dp[i/3] + 1);
            if (i % 2 == 0) dp[i] = Math.min(dp[i], dp[i/2] + 1);

            dp[i] = Math.min(dp[i], dp[i-1] + 1);
        }

        System.out.println(dp[n]);
    }
}