본문 바로가기
Algorithm/DP(동적 계획법)

[백준][9095번][DP] 1,2,3 더하기

by 우툴 2016. 4. 10.
728x90

1,2,3 더하기

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

<코드>

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
#include <stdio.h>
 
int main(void){
    int testcase;
    scanf("%d", &testcase);
    while (testcase--){
        int Dp[15= {};
        Dp[0= 1;
        int K;
        scanf("%d", &K);
 
        for (int i = 1; i <= K; i++){
                
            if (i-1>=0)
                Dp[i] += Dp[i - 1];
            if (i - 2 >= 0)
                Dp[i] += Dp[i - 2];
            if (i - 3 >= 0)
                Dp[i] += Dp[i - 3];
        }
 
        printf("%d\n", Dp[K]);
 
    }
    return 0;
}
cs

<문제 푼 요령>

 1. 이 문제 같은경우는 1,2,3 만 고려해줘야하기 때문에 푸는 방법이 어렵지 않다.

 2. 각 숫자에 대해서 어떤 경우의 수가 있을지만 생각하면 된다. 

 3. 간단하게 앞자리 수에 1, 2, 3 이 나올 경우를 생각해 보면 된다. 즉 예를 들면 숫자 4 같은경우는 앞에 1이 추가됬을때 1  -> 4-1 인 3을 만드는 모든 경우의  수가 되고 2가 추가된다면 -> 4-2 인 2를 만드는 모든 경우의 수를 추가하고 3을 앞에 추가하면 3-1인 1을 만드는 모든 경우의 수를 추가하면 된다.

 4. 즉 Dp[i] += Dp[i-1]  , Dp[i] += Dp[i-2] , Dp[i] += Dp[i-3] 의 값을 꾸준히 더해주면서 구하면되는데 계산을 쉽게 하기위해 Dp[0]의 경우를 1로 채워 넣는다.

728x90

'Algorithm > DP(동적 계획법)' 카테고리의 다른 글

[Dovelet][DP] 01knapsack  (0) 2016.04.12
[백준][2240번][DP] 자두나무  (0) 2016.04.11
[백준][2294번][DP] 동전 2  (2) 2016.04.09
[백준][2293번][DP] 동전 1  (1) 2016.04.09
[ALGOSPOT][DP] PI  (1) 2016.04.06

댓글