[BOJ] 2482. ์ƒ‰์ƒํ™˜ (๐Ÿฅ‡, DP)

lemythe423ยท2024๋…„ 2์›” 18์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
112/133
post-thumbnail

๐Ÿ”—

๐Ÿ“

์›ํ˜• ํ˜•ํƒœ์˜ DP ๋ฌธ์ œ์ด๋‹ค. N์˜ ์ˆ˜๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ n๋ฒˆ์งธ ์นธ์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์„ ํƒํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ๋‚˜๋ˆ ์„œ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. N=4, K=2 ๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € N=4 ๋ฒˆ์งธ ์นธ์„ ์„ ํƒํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ์‚ฌ์‹ค์ƒ 4์นธ ์ค‘ 1์นธ์€ ๋ฌด์กฐ๊ฑด ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ 3์นธ ์ค‘์— 2์นธ์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์ธ๋ฐ, ์›ํ˜• 3์นธ์—์„œ 2์นธ์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 0์ด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ํ˜„์žฌ ์ƒํ™ฉ์—์„œ๋Š” 0์ด์ง€๋งŒ ์–ด์จŒ๊ฑฐ๋‚˜ 4์นธ ์ค‘ 2์นธ์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์— 3์นธ ์ค‘ 2์นธ์—์„œ๋งŒ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค์Œ์€ N=4 ๋ฒˆ์งธ ์นธ์„ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋ฌด์กฐ๊ฑด ์˜†์— ํ•œ ์นธ์„ ๋–จ์–ดํŠธ๋ ค ๋†“๊ณ  ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ตญ ์„ ํƒํ•œ ๊ฑด 1์นธ์ด์ง€๋งŒ ์˜†์˜ ๋–จ์–ดํŠธ๋ฆด ํ•œ ์นธ๊นŒ์ง€ ํฌํ•จํ•ด์„œ 2์นธ์„ ๋นผ๋†“๊ณ  ๊ณจ๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ๋œ 1์นธ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ 2์นธ ์ค‘์—์„œ 1์นธ๋งŒ ๊ณ ๋ฅด๋ฉด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ 2์นธ ์ค‘ 1์นธ์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ์—ญ์‹œ 4์นธ ์ค‘ 2์นธ์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์— ํฌํ•จ๋œ๋‹ค.

4์นธ ์ค‘ 2์นธ ๊ณ ๋ฅด๊ธฐ = 3์นธ ์ค‘ 2์นธ ๊ณ ๋ฅด๊ธฐ + 2์นธ ์ค‘ 1์นธ ๊ณ ๋ฅด๊ธฐ

์ ํ™”์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์• ์ดˆ์— ์‹œ์ž‘์„ 4์นธ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ๋ณ„๋‹ค๋ฅธ ์˜ˆ์™ธ์ƒํ™ฉ ์ฒ˜๋ฆฌ ์—†์ด ํ•œ ๋ฒˆ์— ๊ณ„์‚ฐ๋œ๋‹ค. 3์นธ์—์„œ 2์นธ์„ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ž๋™์œผ๋กœ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ƒํ™ฉ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์›ํ˜•์œผ๋กœ ๊ณ ๋ คํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐธ๊ณ ๋กœ K ๊ฐ€ N/2 ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋Š” ์•„์˜ˆ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฐ”๋กœ 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

import java.util.*;
import java.io.*;

public class Main {
    static int MOD = 1_000_000_003;

    static int sol(int N, int K) {

        if (N / 2 < K) {
            return 0;
        }

        int[][] dp = new int[N + 1][K + 1];

        for (int i = 1; i <= N; i++) {
            dp[i][1] = i;
        }

        for (int i = 4; i <= N; i++) {
            for (int j = 2; j <= K; j++) {
                dp[i][j] = (dp[i-1][j] + dp[i-2][j-1]) % MOD;
            }
        }

        return dp[N][K];
    }
    
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int K = sc.nextInt();

        System.out.println(sol(N, K));
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€