μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- SQL
- λμ ν©
- μ λ ¬
- λ°±μ€
- κ·Έλννμ
- κΉμ΄μ°μ νμ
- λ°μ΄ν°λ² μ΄μ€
- λ€μ΄λλ―Ήνλ‘κ·Έλλ°
- νμ΄μ¬
- LIS
- λλΉμ°μ νμ
- λ³ν©μ λ ¬
- μν
- 그리λ
- skala
- μμνμ
- BFS
- μ€λΈμ
- ν°μ€ν 리μ±λ¦°μ§
- db
- κ·Έλν
- μκ³ λ¦¬μ¦
- DFS
- DP
- νλ‘κ·Έλλ¨Έμ€
- skala1κΈ°
- ꡬν
- μ°μ μμν
- λμ κ³νλ²
- λ¨Έμ§μνΈ
- Today
- Total
πππ°πΈ π£πΆπ΅ π΄π΅π¦π’π₯πΊ
[λ°±μ€] 1463λ²: 1λ‘ λ§λ€κΈ° - C++ λ³Έλ¬Έ
λ¬Έμ
μ μ Xμ μ¬μ©ν μ μλ μ°μ°μ λ€μκ³Ό κ°μ΄ μΈ κ°μ§ μ΄λ€.
- Xκ° 3μΌλ‘ λλμ΄ λ¨μ΄μ§λ©΄, 3μΌλ‘ λλλ€.
- Xκ° 2λ‘ λλμ΄ λ¨μ΄μ§λ©΄, 2λ‘ λλλ€.
- 1μ λΊλ€.
μ μ Nμ΄ μ£Όμ΄μ‘μ λ, μμ κ°μ μ°μ° μΈ κ°λ₯Ό μ μ ν μ¬μ©ν΄μ 1μ λ§λ€λ €κ³ νλ€. μ°μ°μ μ¬μ©νλ νμμ μ΅μκ°μ μΆλ ₯νμμ€.
μ λ ₯
첫째 μ€μ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 106λ³΄λ€ μκ±°λ κ°μ μ μ Nμ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ°μ°μ νλ νμμ μ΅μκ°μ μΆλ ₯νλ€.
DPλ₯Ό μ΄μ©νμ¬ ν μ μλ λ¬Έμ .
1. Nμ΄ 3μΌλ‘ λλμ΄ λ¨μ΄μ§λ©΄, 3μΌλ‘ λλλ€ β‘οΈ D[N] = D[N/3] + 1
2. Nμ΄ 2λ‘ λλμ΄ λ¨μ΄μ§λ©΄, 2λ‘ λλλ€ β‘οΈ D[N] = D[N/2] + 1
3. 1μ λΊλ€ β‘οΈ D[N] = D[N - 1] + 1
κ·Έλ¬λ μ¬κΈ°μ μ£Όμ΄μ§ κ·μΉλλ‘ νλ€λ³΄λ©΄ ν릴 μ μκΈ° λλ¬Έμ νλ² λ μκ°μ ν΄μ€μΌ νλ€.
10μ κ²½μ°, λλ λ¨μ΄μ§λ λλ‘ νλ©΄ 10->5->4->2->1 λ‘ 4κ° μΆλ ₯λ μ μμ§λ§, λ΅μ 10->9->3->1 λ‘ 3μ΄λ€.
10κ³Ό κ°μ κ²½μ°λ₯Ό μκ°ν΄μ 1μ λ¨Όμ λΉΌμ€ λ€ μ°μ°νλ κ²½μ°κ° λ μμμ§, μλ κ°μμ μ°μ°μ ν΄μ£Όλ κ²½μ°κ° λ μμμ§ λΉκ΅λ₯Ό νλ©° νμ΄μ€μΌνλ€.
λ¬Έμ λ₯Ό ν λ μμ§ bottom-up λ°©μμ 곡λΆνμ§ μμμ λμ¬μ, top-down λ°©μμΌλ‘ νμλ€.
μ½λ
#include <cstdio>
#include <vector>
#define MAX 1000001
using namespace std;
vector<int> memo(MAX, -1);
int DP(int num);
int main(void) {
int num;
scanf("%d", &num);
printf("%d\n", DP(num));
return 0;
}
int DP(int num) {
if(num == 1) return 0;
if(memo[num] != -1) {
return memo[num];
}
memo[num] = DP(num - 1) + 1;
if(num % 3 == 0) {
memo[num] = (DP(num / 3) + 1) < memo[num] ? DP(num / 3) + 1 : memo[num];
}
if (num % 2 == 0) {
memo[num] = (DP(num / 2) + 1) < memo[num] ? DP(num / 2) + 1 : memo[num];
}
return memo[num];
}
+) 2022.02.10 μΆκ°
bottom-up λ°©μμΌλ‘λ νμ΄λ³΄μλ€. 보면 μκ² μ§λ§ μ κ·Όλ°©λ²λ, μμλ λμΌνκ² νμ΄μ£Όλ, μ¬κ·μμ λ°λ³΅λ¬ΈμΌλ‘λ§ λ°κΏμ£Όλ©΄ λλ€.
μ½λ(2)
#include <cstdio>
#define MAX 1000001
int DP(int num);
int min(int a, int b) {
return a < b ? a : b;
}
int main(void) {
int n;
scanf("%d", &n);
printf("%d\n", DP(n));
return 0;
}
int DP(int num) {
int memo[MAX];
for(int i = 2; i <= num; i++) {
memo[i] = memo[i - 1] + 1;
if(i % 3 == 0) {
memo[i] = min(memo[i], memo[i / 3] + 1);
}
if(i % 2 == 0) {
memo[i] = min(memo[i], memo[i / 2] + 1);
}
}
return memo[num];
}
'μ½λ©ν μ€νΈ μ€λΉ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 2156λ²: ν¬λμ£Ό μμ - C++ (0) | 2021.07.17 |
---|---|
[λ°±μ€] 9095λ²: 1, 2, 3 λνκΈ° - C++ (0) | 2021.07.16 |
[λ°±μ€] 11727λ²: 2Γn νμΌλ§ 2 - C++ (0) | 2021.07.13 |
[λ°±μ€] 11726λ²: 2Γn νμΌλ§ - C++ (0) | 2021.07.12 |
[λ°±μ€] 10814λ²: λμ΄μ μ λ ¬ - C++ (0) | 2021.07.11 |