์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 11. 12:41

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป C++ ์ œ์ถœ์ฝ”๋“œ


#include <stdio.h>
#include <algorithm>
using namespace std;

int main(){
    int N;
    scanf("%d", &N);

    int DP[N];
    DP[1] = 0;

    for(int i=2; i<=N; i++){
        DP[i] = DP[i-1] + 1;
        if(i % 2 == 0) DP[i] = min(DP[i], DP[i/2] + 1);
        if(i % 3 == 0) DP[i] = min(DP[i], DP[i/3] + 1);
    }
    printf("%d", DP[N]);
}

 

๐Ÿ“ ๋ฌธ์ œํ’€์ด ๊ณผ์ •


  • ๊ทœ์น™์„ ์ฐพ์•„์„œ ์ ํ™”์‹์„ ๋งŒ๋“ ๋‹ค.
  • ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋Š” ์ˆซ์ž, ์ˆซ์ž์˜ ๊ฐ’์€ ์„ธ ๊ฐœ์˜ ์—ฐ์‚ฐ ์ตœ์†Œ๋กœ ์ˆซ์ž๋ฅผ 1๋กœ ๋งŒ๋“œ๋Š” ์ตœ์†Œ ํšŸ์ˆ˜
  • DP[1] = 0 (1์€ ๊ทธ๋ƒฅ 1์ด๋ฏ€๋กœ ์—ฐ์‚ฐ 0๋ฒˆ)
  • N์€ N-1์— 1์„ ๋”ํ•˜๊ณ , N/2์— 2๋ฅผ ๊ณฑํ•˜๊ณ , N/3/์— 3์„ ๊ณฑํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • DP[i] (ํ˜„์žฌ ์ˆซ์ž์˜ ์—ฐ์‚ฐํšŸ์ˆ˜) = DP[i-1] + 1์œผ๋กœ ์ •ํ•˜๊ณ , i๊ฐ€ 2๋กœ ๋‚˜๋ˆ ๋–จ์–ด์ง€๋ฉด DP[i]์™€ DP[i/2] + 1์—์„œ ์ตœ์†Ÿ๊ฐ’์„, 3์œผ๋กœ ๋‚˜๋ˆ  ๋–จ์–ด์ง€๋ฉด DP[i], DP[i/3]+1์—์„œ ์ตœ์†Ÿ๊ฐ’์„ ๊ฐ€์ ธ๋‚œ๋‹ค.

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ