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

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 11057๋ฒˆ: ์˜ค๋ฅด๋ง‰ ์ˆ˜ (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 12. 01:55

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

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


  • i๋Š” 1 ~ N๊นŒ์ง€, j๋Š” 0 ~ 9๊นŒ์ง€ ๋ฒ”์œ„
  • N = 1
    • ํ•œ ์ž๋ฆฌ์ผ ๋•Œ 
    • 0 ~ 9 (10๊ฐ€์ง€)
  • DP[i][j] = DP[i-1][k]
    • DP[i][j](i๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜์ผ ๋•Œ, j ์ˆซ์ž๊ฐ€ ์˜ฌ ๋•Œ)๋Š” ์ด์ „(i-1)์€ ํ•ด๋‹น ์ˆ˜(i)๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ ํ•ด๋‹น ์ˆ˜(k<=j)๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ด DP[i-1][k]์— ๋Œ€ํ•œ 0 ~ j๊นŒ์ง€์˜ ๊ฒฝ์šฐ๋ฅผ DP[i][j]์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋”ํ•ด์ค€๋‹ค.
    • ์ดํ›„ DP[i][j] % 10007์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

 

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


#include <stdio.h>

int main(){
    int N;
    scanf("%d", &N); // N: length of number

    int DP[N+1][10] = {};

    for(int i=0; i<10; i++) DP[1][i] = 1;

    for(int i=2; i<=N; i++){ // ์ž๋ฆฟ์ˆ˜
        for(int j=0; j<10; j++){
            for(int k=0; k<=j; k++){ // 0 ~ 9 ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฝ์šฐ
                DP[i][j] += DP[i-1][k];
            }
            DP[i][j] %= 10007;
        }
    }
    int sum=0;
    for(int i=0; i<10; i++){
        sum = (sum + DP[N][i]) % 10007; 
    }
    printf("%d", sum % 10007);
}

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

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