๐ป
[๋ฐฑ์ค] ๋์ ํ๋ก๊ทธ๋๋ฐ - 1463. 1๋ก ๋ง๋ค๊ธฐ ๋ณธ๋ฌธ
[๋ฐฑ์ค] ๋์ ํ๋ก๊ทธ๋๋ฐ - 1463. 1๋ก ๋ง๋ค๊ธฐ
๋ํจ๋ 2020. 3. 16. 11:14๋ฌธ์
์ ์ X์ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ง ์ด๋ค.
- X๊ฐ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 3์ผ๋ก ๋๋๋ค.
- X๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 2๋ก ๋๋๋ค.
- 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] > 0) return 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
|
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 3967. ๋งค์ง ์คํ (0) | 2020.03.18 |
---|---|
[๋ฐฑ์ค] ์๋ฃ๊ตฌ์กฐ - ์ฒ ๋ฒฝ ๋ณด์ ์๊ณ ๋ฆฌ์ฆ (0) | 2020.03.18 |
[๋ฐฑ์ค] ์๋ฎฌ๋ ์ด์ - 14891. ํฑ๋๋ฐํด (0) | 2020.03.15 |
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 2217.๋กํ (0) | 2020.03.14 |
[๋ฐฑ์ค] ์๋ฎฌ๋ ์ด์ - 2164. ์นด๋2 (0) | 2020.03.13 |