์ฐ์ ๊ธฐ๋ก ๐ช
[๋ฐฑ์ค 1463] -1๋ก๋ง๋ค๊ธฐ(C++)/๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ๋ณธ๋ฌธ
[๋ฐฑ์ค 1463] -1๋ก๋ง๋ค๊ธฐ(C++)/๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
kite707 2021. 7. 29. 00:48https://www.acmicpc.net/problem/1463
1463๋ฒ: 1๋ก ๋ง๋ค๊ธฐ
์ฒซ์งธ ์ค์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 106๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ N์ด ์ฃผ์ด์ง๋ค.
www.acmicpc.net
์ ๊ทผ์ ์ ํ๋๋ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ๊ฐ ๋น๊ตํด์ ์ต์๊ฐ์ผ๋ก ๋ต์ ๋ด์ผํ๋ค๋ ์ ์ ๊ฐ๊ณผํด์ ํ์ฐธ ํค๋งจ ๋ฌธ์ ์ด๋ค. ๋ด๊ฐ ์๊ฐํ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
๊ฐ ์๋ฅผ 1๋ก ๋ง๋๋ ๊ฒฝ์ฐ๋ฅผ ๋์ดํด ๋ณด์๋ค.
์ ๋ ฅ | 1 | 2 | 3 | 4 | 5 | ... | 8 | 9 | 10 |
์ฐ์ฐ ํ์ | 0 | 1 | 1 | 2 | 3 | ... | 3 | 2 | 3 |
์ ํ์์ ์๋์ ๊ฐ์ด ์ธ์ ์๋ค.
- n=1์ด๋ฉด 0
- 3์ผ๋ก ๋๋ ์ง ๋ : f(x)=1+f(x/3)
- 2๋ก ๋๋ ์ง ๋ : f(x)=1+f(x/2)
- ๋ ์๋ก ๋๋ ์ง์ง ์์ ๋ : f(x)=f(x-1)+1
์ด๋ฐ์์ผ๋ก ์ธ์ ์๋ค. ์ ์ฉํด๋ณด๋ฉด f(5)=1+f(4)=1+2=3 ์ด๋ฐ์์ผ๋ก ๋ง์ด๋ค. ๊ทธ๋ฐ๋ฐ 10์ ๊ฒฝ์ฐ ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ฐ์ ํ๋ฉด f(10)=1+f(5)=4๊ฐ ๋์จ๋ค. ์ด ๋ฐฉ๋ฒ๋ณด๋ค๋ f(10)=1+f(9)=3์ด ๋ ๋น ๋ฅด๋ค. ๊ทธ๋์ ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ผ๋ก ๋ค ๊ตฌํด๋ณธ ๋ค ๋ ์ค ์ต์๊ฐ์ ์ฑํํด์ผ ํ๋ค. ๊ทธ๋ ๊ฒ ํ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
#include <iostream>
using namespace std;
int arr[1000001];
int init = 0;
int number(int x) {
if (x == 1) {
return 0;
}
if (arr[x] != 0) {
return arr[x];
}
int res= 1 + number(x - 1);
if (x % 3 == 0) res = min(res, 1 + number(x / 3));
if (x % 2 == 0) res = min(res, 1 + number(x / 2));
arr[x] = res;
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
arr[2] = 1;
arr[3] = 1;
cin >> init;
cout << number(init);
}
'Problem Solving > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1541] ์์ด๋ฒ๋ฆฐ ๊ดํธ(C++) (0) | 2021.08.13 |
---|---|
[๋ฐฑ์ค 1676]- ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์(C++) (0) | 2021.07.30 |
[๋ฐฑ์ค 1620]-๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์(C++)/์ด์งํ์, ์ซ์์ฌ๋ถ (0) | 2021.07.28 |
[๋ฐฑ์ค1978]-์์ ์ฐพ๊ธฐ(C++) (0) | 2021.07.18 |
[๋ฐฑ์ค2609]-์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์(C++)/์ ํด๋ฆฌ๋ ํธ์ ๋ฒ (0) | 2021.07.18 |