๐Ÿ’ป

[๋ฐฑ์ค€] ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 1463. 1๋กœ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 1463. 1๋กœ ๋งŒ๋“ค๊ธฐ

๋˜ํšจ๋‹ˆ 2020. 3. 16. 11:14

๋ฌธ์ œ

์ •์ˆ˜ X์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ ๊ฐ€์ง€ ์ด๋‹ค.

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

์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์œ„์™€ ๊ฐ™์€ ์—ฐ์‚ฐ ์„ธ ๊ฐœ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์„œ 1์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—ฐ์‚ฐ์„ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

2

 

์˜ˆ์ œ ์ถœ๋ ฅ1

1

 

์˜ˆ์ œ ์ž…๋ ฅ2

10

 

์˜ˆ์ œ ์ถœ๋ ฅ2

3

 

ํžŒํŠธ

10์˜ ๊ฒฝ์šฐ์— 10 -> 9 -> 3 -> 1 ๋กœ 3๋ฒˆ ๋งŒ์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ๊ฐ

Top-down ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ์„œ ํ•ด๊ฒฐํ•ด์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์„œ ์‹์„ ๋„์ถœํ•˜์˜€๋‹ค. 

d[x]: x๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜ ๋ผ๊ณ  ํ•˜๋ฉด,

 

1. ์˜ ๊ฒฝ์šฐ x/3๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜ + 1 = x๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜๊ฐ€ ๋˜๋ฏ€๋กœ d[x] = d[x/3] + 1 

2. ์˜ ๊ฒฝ์šฐ x/2๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜ + 1 = x๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜๊ฐ€ ๋˜๋ฏ€๋กœ d[x] = d[x/2] + 1

3. ์˜ ๊ฒฝ์šฐ x-1๋ฒˆ์งธ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜ + 1 = x๋ฒˆ์จฐ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ d[x] = d[x-1] + 1

๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
using namespace std;
int d[1000000];
 
int solve(int n){
    if(n==1){
        return 0;
    }
    if(d[n] > 0return d[n];
    d[n] = solve(n-1+ 1;
    if(n%3==0){
        int temp = solve(n/3+ 1;
        if(d[n] > temp){
            d[n] = temp;
        }
    }
    if(n%2==0){
        int temp = solve(n/2+ 1;
        if(d[n] > temp){
            d[n] = temp;
        }
    }
    return d[n];
}
int main(int argc, const char * argv[]) {
    // insert code here...
 
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    int X;
    
    cin >> X;
    
    cout << solve(X) << "\n";
    
    return 0;
}
 
 
Colored by Color Scripter
๋ฐ˜์‘ํ˜•
Comments