본문 바로가기
알고리즘 문제풀이

[백준 9095] 알고리즘 50일차 : 1,2,3더하기

by SiO2whocode 2020. 8. 25.
728x90

https://www.acmicpc.net/problem/9095

 

9095번: 1, 2, 3 더하기

문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는

www.acmicpc.net

동적계획법 C++

n이 1,2,3의 합으로 구성되는 경우의 수를 구하는 문제 (조합아님)

 

접근 방법

n을 1,2,3의 합으로 나타내는 경우의 수는 ( n-1의 경우 + n-2의 경우 + n-3의 경우) 이다.

순서가 상관있는 문제기때문에 n-1의 경우에 +1 을 한 경우들, n-2의 경우에 +2를 한 경우들, n-3의 경우에 +3을 한 경우들이

모두 다른 경우로 여겨진다.

n이 1,2,3인 경우 초기값을 미리 지정해두고 배열에 담긴 값을 사용한다.

cases[n] = cases[n-1]+cases[n-2]+cases[n-3] 식을 사용한다.

 

소스코드

#include <iostream>
using namespace std;

int main(){
    int T;
    cin >> T;
    
    int cases[11] = {0};
    cases[1] = 1;
    cases[2] = 2;
    cases[3] = 4;
    
    int n;
    for(int i = 0 ; i < T ; i++){
        cin >> n;
        for(int j = 4 ; j <= n ; j++){
            if(cases[j] != 0){
                continue;
            }
            cases[j] = cases[j-1]+cases[j-2]+cases[j-3];
        }
        cout << cases[n] << "\n";
    }
    
    return 0;
}
728x90