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

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 10844๋ฒˆ: ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜ (Dynamic Programming, C++)

PROGRAMMING/Algorithm

by koharin 2021. 2. 12. 01:47

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

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


  • DP[n]: n์ž๋ฆฌ ์ˆ˜์—์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ณ„๋‹จ ์ˆ˜์˜ ๊ฐœ์ˆ˜
  • DP[0] = 9 (1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9)
  • DP[n][m]์—์„œ n์ด ์•ž์ž๋ฆฌ, m์ด ๋’ท์ž๋ฆฌ
  • ์ดˆ๊ธฐ ๊ฐ’: N์ด 1์ผ ๋•Œ, 0~9๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ DP[1][i]์— ๋Œ€ํ•ด count๋ฅผ 1๋กœ ํ• ๋‹นํ•ด์ค€๋‹ค.
  • 2 ~ N๊นŒ์ง€(N๋ฒˆ์งธ ์ž๋ฆฌ) 0 ~ 9์˜ ์ˆ˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ ํ™”์‹์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    • DP[i][0] = DP[N-1][1] : ๋‘˜์งธ ์ž๋ฆฌ๊ฐ€ 0์ธ ๊ฒฝ์šฐ, ์•ž์—๋Š” 1๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (์ด์ „์ด 1์ด์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ„)
    • DP[i][9] = DP[N-1][8] : 9์ธ ๊ฒฝ์šฐ, ์ฃผ๋ณ€์— 8๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 
    • DP[i][j] = DP[N-1][i-1] + DP[N-1][i+1] : ๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ, ์ฆ‰ 1 ~ 8์˜ ๊ฒฝ์šฐ, ํ•ด๋‹น ์ˆซ์ž๋ณด๋‹ค 1 ์ž‘๊ฑฐ๋‚˜, 1 ํฐ ์ˆ˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

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


#include <stdio.h>

int main(){
    int N;
    scanf("%d", &N);

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

    for(int i=0; i<10; i++){
        DP[1][i] = 1; // 1_ ์ผ ๋•Œ 0 ~ 9 ์ €์žฅ
    }
    for(int i=2; i <= N; i++){
        for(int j=0; j<10; j++){ // 0 ~ 9
            if(j == 0) DP[i][0] = DP[i-1][1]; // ๋’ท์ž๋ฆฌ๊ฐ€ 0์ผ ๋•Œ ์•ž์€ 1
            else if(j == 9) DP[i][9] = DP[i-1][8]; // 9๊ฐ€ ์˜ฌ ๋•Œ ์ด์ „์€ 8 ๋˜๋Š” ์ดํ›„๋Š” 8
            else DP[i][j] = (DP[i-1][j-1] + DP[i-1][j+1]) % 1000000000; // 1 ~ 8 ์˜ ๊ฒฝ์šฐ, +1 ์ˆ˜ ๋˜๋Š” -1 ์ˆ˜
        }
    }
    int sum=0;
    for(int i=1; i<10; i++){ // N์ž๋ฆฌ์ผ ๋•Œ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด์คŒ
        sum = (sum + DP[N][i]) % 1000000000;
    }
    printf("%d", sum % 1000000000);
    
}

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•

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