Algorithm/baekjoon
(dp)1463 1로 만들기/9095 1,2,3 더하기
쿠뱃봉
2022. 2. 22. 17:03
1.1463 1로 만들기
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
int d[1000001];
int main() {
cin.tie(NULL);
cin.sync_with_stdio(false);
cout.tie(NULL);
int N;
cin >> N;
d[1] = 0;
for (int i = 2; i <= N; i++) {
d[i] = d[i - 1] + 1;
if (i % 2 == 0) d[i]=min(d[i / 2] + 1, d[i]);
if (i % 3 == 0)d[i]=min(d[i / 3] + 1, d[i]);
}
cout << d[N];
return 0;
}
2.9095 1,2,3 더하기
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
int d[11];
int main() {
cin.tie(NULL);
cin.sync_with_stdio(false);
cout.tie(NULL);
d[1] = 1;
d[2] = 2;
d[3] = 4;
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int n;
cin >> n;
for (int s = 1; s <= n; s++) {
if (s == 1 || s == 2 || s == 3)
continue;
d[s] = d[s - 1] + d[s - 2] + d[s - 3];
}
cout << d[n]<<"\n";
}
return 0;
}