๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

๋ฐฑ์ค€ 2225๋ฒˆ) ํ•ฉ๋ถ„ํ•ด java ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 2225๋ฒˆ) ํ•ฉ๋ถ„ํ•ด java

sehaan 2023. 2. 22. 14:49

๋ถ„์„


- ๋ช‡๊ฐœ(k)์˜ ์ •์ˆ˜๋ฅผ ๋”ํ•˜๋“  ๊ฒฐ๊ตญ ๋งˆ์ง€๋ง‰์€ 0~N์ด ๋œ๋‹ค.

  ex) 7 6 

        : (~, 7)(~, 6)(~, 5)(~, 4)(~, 3)(~, 2)(~, 1)(~, 0)

  ํ•˜์ง€๋งŒ ๋งˆ์ง€๋ง‰์— N์œผ๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด์ฐจํ”ผ ์•ž๋ถ€๋ถ„์ด 0์ด๋ฏ€๋กœ +1๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

  k๊ฐ€ 1์ด ์•„๋‹Œ์ด์ƒ ๋’ค์˜ ์ˆซ์ž๋Š” ๋ฌด!์กฐ!๊ฑด! 0~N์ด๋‹ค ..! 

  

  ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•˜๋ฉด 

  dp[n][k] = dp[n-0][k-1] // n-0์˜ k-1 ๊ฐœ ๊ฒฝ์šฐ์˜ ์ˆ˜

  dp[n][k] = dp[n-1][k-1] // n-1์˜ k-1 ๊ฐœ ๊ฒฝ์šฐ์˜ ์ˆ˜

  dp[n][k] = dp[n-2][k-1] // n-2์˜ k-1 ๊ฐœ ๊ฒฝ์šฐ์˜ ์ˆ˜

  dp[n][k] = dp[n-3][k-1] // n-3์˜ k-1 ๊ฐœ ๊ฒฝ์šฐ์˜ ์ˆ˜

  ...

  dp[n][k] = dp[n-(n-1)][k-1] // n-(n-1)์˜ k-1 ๊ฐœ ๊ฒฝ์šฐ์˜ ์ˆ˜

  dp[n][k] += 1

  ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  ๊ทธ๋ฆฌ๊ณ  k๊ฐœ ์ˆซ์ž์˜ ํ•ฉ๋ถ„ํ•ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๊ทธ ์ „ ์ˆ˜๊นŒ์ง€๋Š” k-1๊นŒ์ง€๋งŒ ๊ตฌํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ๊ตฌํ•˜๋ ค๋Š” k๊ฐœ์˜ ์ˆซ์ž์˜ 

   ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค !

 

์ฝ”๋“œ


import java.util.Scanner;
import java.util.Stack;

public class main {

    static long[][] dp;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int value = sc.nextInt();
        int cnt = sc.nextInt();
        dp = new long[value + 1][cnt + 1];

        for (int i = 1; i <= value; i++) {
            dp[i][1] = 1;
            for (int j = 2; j < cnt; j++) {
                for (int k = 0; k < i; k++) {
                    dp[i][j] += dp[i - k][j - 1] % 1000000000;
                }
                dp[i][j] += 1;
            }
        }

        if (cnt == 1) {
            System.out.println(dp[value][cnt]);
        } else {
            for (int i = 0; i < value; i++) {

                dp[value][cnt] += dp[value - i][cnt - 1] % 1000000000;
            }

            dp[value][cnt] += 1;
            System.out.println(dp[value][cnt] % 1000000000);
        }
    }


}