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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS(DP)] (๋ฐฑ์ค€ 1463) 1๋กœ ๋งŒ๋“ค๊ธฐ

by Wonit 2020. 3. 27.
๋ฐฑ์ค€ 1๋กœ ๋งŒ๋“ค๊ธฐ ๋Š” solved.ac ๊ธฐ์ค€ Tier : Silver3

์ด ๋ฌธ์ œ๋Š” DP ๋ฌธ์ œ๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ DP ๋ฌธ์ œ์ค‘ ์‰ฌ์šด ํŽธ์— ์†ํ•œ๋‹ค.

DP ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ธฐ ์ด๋ฉฐ, ํ•ด๋‹น ๋ฌธ์ œ์—๋„ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค.

ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌธ์ œ์— ๋ณด์ด๋Š” ์ผ์ •ํ•œ ๊ทœ์น™์„ ์ฐพ์•„ ์ ํ™”์‹์œผ๋กœ ๋„์ถœํ•˜๋Š” ๊ณผ์ •์ด ํ•„์ˆ˜์ ์ด๋‹ค.

๋ฌธ์ œ

 

์ž…์ถœ๋ ฅ

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

 

1๋กœ ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ๋Š” ์ •์ˆ˜ x๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ  x๊ฐ€ 1์ด๋˜๊ธฐ ๊นŒ์ง€ ์ตœ๋‹จ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ 1๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ค€์ด ์กด์žฌํ•œ๋‹ค.

 

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

์ด๋ฅผ ๊ธฐ์ค€์„ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์ž.

๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํฐ ๋ฌธ์ œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ์˜ ํ’€์ด ์‹์„ d(n) ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, d(n) = ์ž…๋ ฅ n์„ 1๋กœ ๋งŒ๋“œ๋Š” ์ตœ์†Œ ํšŸ์ˆ˜ ๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ์ € ๊ฐ’์— ์œ„์—์„œ ๋งํ•œ 1๋กœ ๋งŒ๋“œ๋Š” ๊ธฐ์ค€์„ ์ ์šฉ์‹œ์ผœ๋ณด์ž.

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

    x/3 ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ 1๋ฒˆ + x/3 ์„ 1๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ x/3

  • x๊ฐ€ 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด 2๋กœ ๋‚˜๋ˆˆ๋‹ค.

    x/3 ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ 1๋ฒˆ + x/3 ์„ 1๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ x/3

  • x์— 1์„ ๋บ€๋‹ค.

    x-1 ์„ 1๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ x-1๋ฒˆ

์œ„์˜ ์‹์— ๋Œ€ํ•œ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ
d[n] = d[n/3] + 1, d[n/2] + 1, d[n-1]์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

์ ํ™”์‹

์œ„์˜ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์ ํ™”์‹์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
d[n] = min(d[n/3] + 1, d[n/2] + 1, d[n-1])

์†Œ์Šค ์ฝ”๋“œ

package stage.stage11_DynamicPrograming;

import java.util.Scanner;

import java.io.*;

public class Prob02_MakeOne {

    static int[] memo;

    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        memo = new int[n+1];

        bw.write(dp(n) + "\n");

        bw.flush();

        bw.close();

    }

    private static int dp(int n){

        if(n == 1) return 0; // minimum case

        if(memo[n] > 0) return memo[n]; // duplication checker

        memo[n] = dp(n-1) + 1; // this location is important.

        if(n % 2 == 0){

            int temp = dp(n/2) + 1;

            if(memo[n] > temp) memo[n] = temp;

        }
        else if(n % 3 == 0){

            int temp = dp(n/3) + 1;

            if(memo[n] > temp) memo[n] = temp;

        }

        return memo[n];
    }
}

๋Œ“๊ธ€