BOJ 1463. 1λ‘ λ§λ€κΈ°
πββοΈ1λ‘ λ§λ€κΈ°
μ μ Xμ μ¬μ©ν μ μλ μ°μ°μ λ€μκ³Ό κ°μ΄ μΈ κ°μ§ μ΄λ€.
- Xκ° 3μΌλ‘ λλμ΄ λ¨μ΄μ§λ©΄, 3μΌλ‘ λλλ€.
- Xκ° 2λ‘ λλμ΄ λ¨μ΄μ§λ©΄, 2λ‘ λλλ€.
- 1μ λΊλ€.
μ μ Nμ΄ μ£Όμ΄μ‘μ λ, μμ κ°μ μ°μ° μΈ κ°λ₯Ό μ μ ν μ¬μ©ν΄μ 1μ λ§λ€λ €κ³ νλ€.
μ°μ°μ μ¬μ©νλ νμμ μ΅μκ°μ μΆλ ₯νμμ€.
μ
λ ₯
첫째 μ€μ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 106λ³΄λ€ μκ±°λ κ°μ μ μ Nμ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ°μ°μ νλ νμμ μ΅μκ°μ μΆλ ₯νλ€.
μμ μ
λ ₯ 1
2
μμ μΆλ ₯ 1
1
μμ μ
λ ₯ 2
10
μμ μΆλ ₯ 2
3
πνμ΄
dpλ¬Έμ μΈλ° μ΄λ»κ² ν μ§ κ°μ΄ μμ‘νμ μ΄λ €μ λ€.
μΈλ»λ΄€μ λ 3μΌλ‘ λλλ©΄ κ°μ₯ μ΅μκ° λλ€κ³ μκ°νλλ° μλμλ€.
μλ₯Ό λ€μ΄μ 17μ΄λ©΄
17 -> 16 -> 8 -> 4 -> 3 -> 1
λ‘ 5λ²μ΄ μ΅μκ°μΈλ° 3μΌλ‘ λλλ κ²μ κ³ μ§νλ©΄
17 -> 16 -> 15 -> 5 -> 4 -> 3 -> 1
λ‘ 6λ²μ΄ λμ¨λ€.
μ΄λ° λ°©μμΌλ‘λ λ¬Έμ λ₯Ό ν μ μμλ€.
μ¬λ¬κ°μ§ κ°μ μ λ€ μκ°νκΈ°μ κ²½μ°μ μκ° λ무 λ§μκΈ° λλ¬Έμ΄λ€.
λμ κ³νλ²μ λ°©λ²μΌλ‘λ κ°μ κΈ°μ΅ν΄λ cacheλ₯Ό λ§λ λ€.
ν΄κ²° λ°©λ²μ κ°λ¨νλλ°, μΌλ¨ cache[i]
μλ cache[i - 1] + 1
μ μ μ₯νλ€.
νμ§λ§ i % 3 == 0
μ΄λΌλ©΄ cache[i]μ cache[i/3] + 1
μ€ μ΅μκ°μΌλ‘ κ°μ μ μ₯νλ€.
λ§μ°¬κ°μ§λ‘ i % 2 == 0
μ΄λΌλ©΄ cache[i]μ cache[i/2] + 1
μ€ μ΅μκ°μΌλ‘ κ°μ μ μ₯νλ€.
int N;
vector<int> cache;
void solve()
{
cin >> N;
cache = vector<int>(N + 1);
cache[1] = 0; // 1μΌ λλ λλ νμκ° μμΌλκΉ
for (int i = 2; i <= N; ++i)
{
cache[i] = cache[i - 1] + 1;
if (i % 3 == 0)
cache[i] = min(cache[i], cache[i / 3] + 1);
if (i % 2 == 0)
cache[i] = min(cache[i], cache[i / 2] + 1);
}
cout << cache[N];
}
λμ κ³νλ²μ μ μμ΄ μλλ€..
πμ 체 μ½λ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<int> cache;
void solve()
{
cin >> N;
cache = vector<int>(N + 1);
cache[1] = 0;
for (int i = 2; i <= N; ++i)
{
cache[i] = cache[i - 1] + 1;
if (i % 3 == 0)
cache[i] = min(cache[i], cache[i / 3] + 1);
if (i % 2 == 0)
cache[i] = min(cache[i], cache[i / 2] + 1);
}
cout << cache[N];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
return 0;
}