๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/๋ฐฑ์ค€

[๋ฐฑ์ค€] 9095 1,2,3 ๋”ํ•˜๊ธฐ DP

by Jouureee 2021. 5. 4.

๋ฌธ์ œ :

www.acmicpc.net/problem/9095

 

9095๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

๋ถ„์„ :

์ ํ™”์‹์„ ์„ธ์šฐ๋ฉด ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค!

ํฐ ๋ฌธ์ œ๊ฐ€ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ „ํ˜•์ ์ธ dp ๋ฌธ์ œ์˜€๊ณ  

1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š” ๊ฒƒ์€ 

 

1์ผ๋•Œ

1

 

2์ผ๋•Œ 

1 + 1

2

 

3์ผ๋•Œ 

1 + 1 + 1

1 + 1 + 2

1 + 2 + 1

1 + 1 + 2

1 + 3

 

๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ด์–ด์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

n = 4์ผ ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚ด์–ด์ง€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ memo[4]๋ผ๊ณ  ํ•˜์ž

๊ทธ๋Ÿด๋•Œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 

1 + memo[3]

2 + memo[2]

3 + memo[1] 

์ผ ๊ฒƒ์ด๋‹ค. 

 

๋”ฐ๋ผ์„œ ์ ํ™”์‹์€ memo[n] = memo[n-1] + memo[n-2] + memo[n-3]๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ด์–ด์ง„๋‹ค.

 

 

c++ ์ฝ”๋“œ :

//
//  9095_123plus.cpp
//  SOMA๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
//
//  Created by JoSoJeong on 2021/05/04.
//

#include <stdio.h>
#include <iostream>
using namespace std;
int dp[11] = {0, };
int memo[11] = {0, };

int dp_plus(int n){
    if(memo[n] > 0){
        return memo[n];
    }else{
        memo[n] = dp_plus(n - 1) + dp_plus(n - 2) + dp_plus(n - 3);
        return memo[n];
    }
}

int main(){
    int TC;
    cin >> TC;
    memo[1] = 1; memo[2] = 2; memo[3] = 4;
    for(int i =0; i < TC; i++){
        int n;
        cin >> n;
        int dpResult = dp_plus(n);
        cout << dpResult << '\n';
    }
  
    return 0;
}

๋Œ“๊ธ€