μ λ ₯
첫째 μ€μ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 10^6λ³΄λ€ μκ±°λ κ°μ μ μ Nμ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ°μ°μ νλ νμμ μ΅μκ°μ μΆλ ₯νλ€.
ν΄κ²° λ°©λ²
μ°μ κ·μΉμ μ°Ύμ보μ. κ³μ°μμ κ²½μ° μ¬λ¬κ°μ§ κ²½μ°μ μκ° λμ¬ μλ μλ€.
N | μ°μ° νμ | κ³μ°μ |
1 | 1 | 1 |
2 | 1 | 2/2=1 |
3 | 1 | 3/3=1 |
4 | 2 | (4-1)/3=1 |
5 | 3 | (5-1)/2/2=1 |
6 | 2 | 6/3/2=1 |
7 | 3 | (7-1)/3/2=1 |
8 | 3 | 8/2/2/2=1 |
9 | 2 | 9/3/3=1 |
10 | 3 | (10-1)/3/3=1 |
μ΄λ€ κ·μΉμ μ°Ύμ μ μμκΉ?
μ°μ μκ° 1μ© μ»€μ§ λλ§λ€ μ°μ° νμλ μ΄μ κ°μ + 1μ ν΄μ£Όλ©΄ λ κ²μ΄λ€.
μλ? '3λ² κ·μΉ, 1μ λΊλ€'μ μν΄ 'νμ¬ μμ°μ - 1 = μ΄μ μμ°μ(?)'μ΄κΈ° λλ¬Έμ΄λ€.
νμ§λ§ μ£Όμν΄μΌν μ μ΄ μλλ° λ°λ‘ 1, 2λ² κ·μΉμ ν΄λΉν λμ΄λ€.
3μ΄λ 2λ‘ λλ μ§λ κ²½μ°μ μ΅μ μ°μ° νμλ μμμ λ§ν λ°©λ²μ΄ μλ 3μ΄λ 2λ‘ λλλ κ²μ΄ λ μ μ΄μ§κΈ° λλ¬Έμ΄λ€.
μλ₯Ό λ€μ΄ 8μ κ²½μ° 3λ² κ·μΉλ§ μλ€κ³ κ°μ νλ©΄, 8-1-1-... = 1, μ΄ 7λ²μ μ°μ° κ³Όμ μ΄ νμνλ€.
νμ§λ§ 8μ 2λ‘ λλ μ§λ―λ‘ 8/2/2/2 = 1, μ΄ 3λ²μ μ°μ°μΌλ‘λ 1μ λ§λ€ μ μκ² λλ€.
λ°λΌμ 3μΌλ‘ λλ μ§λ κ²½μ°μλ 'νμ¬ μμ°μ/3μ μ°μ° νμ' + 1
2λ‘ λλ μ§λ κ²½μ°μλ 'νμ¬ μμ°μ/2μ μ°μ° νμ' + 1λ‘ λνλΌ μ μμ κ²μ΄λ€.
μ°μ dpλ₯Ό μ΅μ μ°μ° νμλ₯Ό μ μ₯ν λ°°μ΄μ΄λΌκ³ μκ°νμ.
μ΄λ₯Ό μ νμμΌλ‘ ꡬννλ©΄
dp[i] = dp[i-1] + 1, dp[i/3] + 1, dp[i/2] + 1 κ° λλ€.
μ΅μ’ μ½λλ
#include <iostream>
using namespace std;
int min(int a, int b){
return a < b ? a : b;
}
int main(){
int n;
cin >> n;
int cnt[1000001];
cnt[1] = 0;
cnt[2] = 1;
cnt[3] = 1;
if (n >= 4){
for(int i=4; i<=n; i++){
cnt[i] = cnt[i-1] + 1;
if(i%3 == 0){
cnt[i] = min(cnt[i], cnt[i/3] + 1);
}
if(i%2 == 0){
cnt[i] = min(cnt[i], cnt[i/2] + 1);
}
}
}
cout << cnt[n];
return 0;
}
μ½λμμ cnt[2]μ cnt[3]μ μ΄κΈ°ν ν΄μ£Όμμ§λ§ μ κ³Όμ μ μλ΅ν΄λ μκ΄μλ€.
νμ§λ§ 'cnt[1] = 0', μ΄ κ³Όμ μ 무쑰건 ν΄μ€μΌνλ€.
κ°μΈμ μΌλ‘ μ΄λ €μ λ€...
'βοΈ μ½ν μ€λΉ > Dynamic Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λμ κ³νλ² 1] [C++] 2156λ². ν¬λμ£Ό μμ (0) | 2021.01.25 |
---|---|
[λμ κ³νλ² 1] [C++] 10844λ². μ¬μ΄ κ³λ¨ μ (0) | 2021.01.24 |
[λμ κ³νλ² 1] [C++] 2579λ². κ³λ¨ μ€λ₯΄κΈ° (0) | 2021.01.14 |
[λμ κ³νλ² 1] [C++] 1932λ². μ μ μΌκ°ν (0) | 2021.01.13 |
[λμ κ³νλ² 1] [C++] 1149λ². RGB 거리 (0) | 2021.01.13 |