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;

}