HyeLog

백준_9095_1, 2, 3 더하기 본문

알고리즘

백준_9095_1, 2, 3 더하기

shj718 2022. 1. 25. 01:24

다이나믹 프로그래밍(dp) 문제였다. 단순한 분할 정복 기법만 사용하면, 답을 구하는 계산을 계속 반복해서 하게 되기 때문에 메모이제이션(답을 배열에 저장해두고 꺼내씀)을 사용하는 기법인 dp를 이용해 풀었다. 

#include <iostream>
#define MAX 11
using namespace std;

int d[MAX];

int solve(int n) {
    if(n==1)
     return 1;
    if(d[n]!=0)
     return d[n];
    if(n==2)
     return d[n]=solve(n-1)+1;
    if(n==3)
     return d[n]=solve(n-1)+solve(n-2)+1;
    else
     return d[n]=solve(n-1)+solve(n-2)+solve(n-3);
}

int main() {
    int x;
    cin>>x;
    for(int i=0;i<x;++i) {
        int n;
        cin>>n;
        cout<<solve(n)<<endl;
    }
    return 0;
}

'알고리즘' 카테고리의 다른 글

백준_15988_1, 2, 3 더하기 3  (0) 2022.01.31
백준_14501_퇴사  (0) 2022.01.25
백준_15661_링크와 스타트  (0) 2022.01.23
백준_14889_스타트와 링크  (0) 2022.01.16
백준_1182_부분수열의 합  (0) 2022.01.16