์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 2225๋ฒˆ: ํ•ฉ๋ถ„ํ•ด (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 23. 23:26

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“ ๋ฌธ์ œํ’€์ด ๊ณผ์ •


N/K 1 2 3 4
1 1 2 3 4
2 1 3 6 10
3 1 4 10 20
4 1 5 15 35

DP[N][K]: 0๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ •์ˆ˜ ์ค‘์—์„œ K๊ฐœ์˜ ์ˆ˜๋กœ N์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜

DP[1][1]๋ถ€ํ„ฐ DP[4][4]๊นŒ์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด๋ฉด, ์ผ๋ฐ˜ํ™”๋œ ์ ํ™”์‹์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

DP[i][1] = 1 : ๋ชจ๋“  ์ˆ˜ N์— ๋Œ€ํ•˜์—ฌ K = 1์ผ ๋•Œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1์ด๋‹ค. 

DP[1][i] = i : ๋ชจ๋“  ์ˆ˜ 1์— ๋Œ€ํ•˜์—ฌ K = i์ผ ๋•Œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” i์ด๋‹ค. 

N = 2, K = 2๋ถ€ํ„ฐ๋Š” DP[N][K] = DP[N-1][K] + DP[N][K-1] ๋ผ๋Š” ์ ํ™”์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

j์˜ ๋ฒ”์œ„๋Š” K ์ดํ•˜๊นŒ์ง€์ด๋‹ค. (๊ทธ ์ดํ›„๋กœ ๋˜๋ฉด out of range๋กœ ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค..)

๋งค DP[i][j]๋งˆ๋‹ค 1000000000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ฐ’์œผ๋กœ ์ค€๋‹ค.

 

 

๐Ÿ’ป C++ ์ œ์ถœ์ฝ”๋“œ


#include <stdio.h>

int main(){
    int N, K;
    scanf("%d %d", &N, &K);
    
    int DP[N+1][K+1] = {0,};
    for(int i=1; i<=N; i++) DP[i][1] = 1; // N = i, K = 1์ผ ๋•Œ ๋ชจ๋“  N์— ๋Œ€ํ•ด์„œ ํ•ญ์ƒ 1
    for(int i=1; i<=K; i++) DP[1][i] = i;

    for(int i=2; i<=N; i++){
        for(int j=2; j<=K; j++){
            DP[i][j] = (DP[i-1][j] + DP[i][j-1]) % 1000000000;
            //printf("DP[%d][%d]: %d\n", i, j, DP[i][j]);
        }
    }
    printf("%d", DP[N][K]);
    
}

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ