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

Tech Log ๐Ÿ› ๏ธ

๋ฐฑ์ค€ 1309) ๋™๋ฌผ์› java ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 1309) ๋™๋ฌผ์› java

sehaan 2023. 2. 25. 01:30

๋ถ„์„


์ฒ˜์Œ์—๋Š” ์‚ฌ์ž๊ฐ€ 1 ...n ๋งˆ๋ฆฌ ์ธ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ ์„œ ์ƒ๊ฐํ•ด์„œ ์‹œ๊ฐ„์„ ๊ฝค ํ—ˆ๋น„ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๋ฏ€๋กœ , ์‚ฌ์ž๊ฐ€ ์•„๋‹Œ '์šฐ๋ฆฌ'๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๊ฐ์„ ํ•ด์•ผํ•œ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ 2X2 ์ธ ๊ฒฝ์šฐ(N=2) , ๋‘ ๋ฒˆ์งธ ์ค„์— ์‚ฌ์ž๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ๋Š” ์ด ์„ธ๊ฐ€์ง€์ด๋‹ค.

1. ์ฒซ๋ฒˆ์งธ ์นธ์— ์‚ฌ์ž๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ

   
์‚ฌ์ž  

2. ๋‘๋ฒˆ์งธ ์นธ์— ์‚ฌ์ž๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ

   
  ์‚ฌ์ž

3. ์‚ฌ์ž๋ฅผ ์•ˆ๋„ฃ๋Š” ๊ฒฝ์šฐ

   
   

 

๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

 

1๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š” ์ฒซ๋ฒˆ์งธ ์ค„์— ๋‘๋ฒˆ์งธ์นธ์— ์‚ฌ์ž๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ , ์•„์˜ˆ ์•ˆ ๋„ฃ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. (2๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)

2๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š” ์ฒซ๋ฒˆ์งธ ์ค„์— ์ฒซ๋ฒˆ์งธ์นธ์— ์‚ฌ์ž๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ , ์•„์˜ˆ ์•ˆ ๋„ฃ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. (2๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)

3๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š” ์ฒซ๋ฒˆ์งธ ์ค„์— ์ฒซ๋ฒˆ์งธ,๋‘๋ฒˆ์งธ์นธ์— ์‚ฌ์ž๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ , ์•„์˜ˆ ์•ˆ ๋„ฃ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. (3๊ฐœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜)

 

์ด๋ฅผ ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

dp[2][1] = dp[1][0] + dp[2]; // 1๋ฒˆ ๊ฒฝ์šฐ

dp[2][2] = dp[1][0] + dp[0]; // 2๋ฒˆ ๊ฒฝ์šฐ

dp[2][0] = dp[1][0] + dp[1][1] + dp[2]; // 3๋ฒˆ ๊ฒฝ์šฐ

 

์ด์ œ ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ 2X3 ์ธ ๊ฒฝ์šฐ(N=3) , 

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ 2X4 ์ธ ๊ฒฝ์šฐ(N=4) , 

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ


import java.util.Scanner;


public class Main {

    static long[][] dp;

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

        dp = new long[num + 1][3];

        dp[1][0] = dp[1][1] = dp[1][2] = 1;

        for (int i = 2; i <= num; i++) {
            dp(i);
        }

        long result = (dp[num][0] + dp[num][1] + dp[num][2]) % 9901;

        System.out.println(result);
    }

    static void dp(int num) {
        dp[num][0] = (dp[num - 1][1] + dp[num - 1][2] + dp[num - 1][0]) % 9901;
        dp[num][1] = (dp[num - 1][0] + dp[num - 1][2]) % 9901;
        dp[num][2] = (dp[num - 1][0] + dp[num - 1][1]) % 9901;
    }

}