Algorithm๐Ÿฅ‡

1309.๋™๋ฌผ์›

hae02y 2023. 11. 8. 11:13
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์–ด๋–ค ๋™๋ฌผ์›์— ๊ฐ€๋กœ๋กœ ๋‘์นธ ์„ธ๋กœ๋กœ N์นธ์ธ ์•„๋ž˜์™€ ๊ฐ™์€ ์šฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

์ด ๋™๋ฌผ์›์—๋Š” ์‚ฌ์ž๋“ค์ด ์‚ด๊ณ  ์žˆ๋Š”๋ฐ ์‚ฌ์ž๋“ค์„ ์šฐ๋ฆฌ์— ๊ฐ€๋‘˜ ๋•Œ, ๊ฐ€๋กœ๋กœ๋„ ์„ธ๋กœ๋กœ๋„ ๋ถ™์–ด ์žˆ๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด ๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ๋Š” ์‚ฌ์ž๋“ค์˜ ๋ฐฐ์น˜ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“๊ณ  ์žˆ๋‹ค.

๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ์˜ ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”„์ง€ ์•Š๋„๋ก ์šฐ๋ฆฌ๊ฐ€ 2*N ๋ฐฐ์—ด์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐ€์ง€์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ฃผ๋„๋ก ํ•˜์ž. ์‚ฌ์ž๋ฅผ ํ•œ ๋งˆ๋ฆฌ๋„ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์นœ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

## ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1โ‰คNโ‰ค100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

## ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ 9901๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 128 MB 32587 15957 12653 47.177%

https://www.acmicpc.net/problem/1309

ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ๋ฆ„

์ผ๋‹จ ์‚ฌ์ž๊ฐ€ ๋“ค์–ด๊ฐˆ์ˆ˜์žˆ๋Š” ์šฐ๋ฆฌ์˜ ์„ธ๋กœ๊ฐ€ n ์ด๋‹ค. ๊ทธ๋Ÿผ 2xn ๊ฐœ์”ฉ ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

n = 1 ์ผ๊ฒฝ์šฐ

2x1 ์˜ ์นธ์ด ์ƒ์„ฑ๋˜๊ณ  n์˜ ์ˆ˜์— ๋”ฐ๋ผ์„œ

arr[n][0] : ๋‘๊ฐœ์˜ ๋ฐฉ์ค‘์— ์‚ฌ์ž๋ฅผ ์•„์˜ˆ ๋„ฃ์ง€ ์•Š์Œ.
arr[n][1] : ๋‘๊ฐœ์˜ ๋ฐฉ์ค‘ ์™ผ์ชฝ๋ฐฉ์—๋งŒ ์‚ฌ์ž๋ฅผ ๋„ฃ์Œ
arr[n][2] : ๋‘๊ฐœ์˜ ๋ฐฉ์ค‘ ์˜ค๋ฅธ์ชฝ ๋ฐฉ์—๋งŒ ์‚ฌ์ž๋ฅผ ๋„ฃ์Œ

๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฑด์€ ์‚ฌ์ž๋ฅผ ๋„ฃ์€๋ฐฉ์˜ ์˜†๋ฐฉ๊ณผ ์•„๋ž˜๋ฐฉ์—๋Š” ์‚ฌ์ž๋ฅผ ๋„ฃ์„์ˆ˜๊ฐ€ ์—†๋‹ค. ์ฆ‰ ์‚ฌ์ž๋ฅผ ๋„ฃ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  n๋ฒˆ๋ฐฉ์— ๋„ฃ์€ ๊ณณ์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ค์Œ ์‚ฌ์ž์˜ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ง„๋‹ค.

dp[i][0] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2] //์ด์ „๋ฐฉ์— ์‚ฌ์ž๊ฐ€ ์–ด๋””์žˆ๋“  ์ƒ๊ด€X
dp[i][1] = dp[i-1][0] + dp[i-1][2] //์ด์ „๋ฐฉ์˜ ์˜ค๋ฅธ์ชฝ, ์—†๋Š”๊ฒฝ์šฐ
dp[i][2] = dp[i-1][0] + dp[i-1][1] //์ด์ „๋ฐฉ์˜ ์™ผ์ชฝ, ์—†๋Š”๊ฒฝ์šฐ

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆŒ์ˆ˜์žˆ๋‹ค.

์ฝ”๋“œ

package ๊ธฐ์ดˆ1.Day20.์ •ํ•ด์˜;  

import java.util.Scanner;  

public class ๋™๋ฌผ์› {  

    static int ZERO = 0;  
    static int Left = 1;  
    static int Right = 2;  
    static int MOD = 9901;  

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

        int n = sc.nextInt(); //์šฐ๋ฆฌ์˜ ํฌ๊ธฐ n  
        long[][] dp = new long[n+1][3];  

        dp[1][ZERO] = 1;  
        dp[1][Left] = 1;  
        dp[1][Right] = 1;  

        for(int i=2; i<=n; i++){  
            dp[i][ZERO] = (dp[i-1][ZERO] + dp[i-1][Left] + dp[i-1][Right]) % MOD;  
            dp[i][Left] = (dp[i-1][ZERO] + dp[i-1][Right]) % MOD;  
            dp[i][Right] = (dp[i-1][Left] + dp[i-1][ZERO]) % MOD;  
        }  

        System.out.println((dp[n][ZERO] + dp[n][Left] + dp[n][Right]) % MOD);  
        sc.close();  
    }  
}

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(dp๋ฅผ 1์ฐจ์›๋ฐฐ์—ด๋กœ ์„ ์–ธ)

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

public class Main {
    public static final int MOD = 9901;
    public static int N, dp[];
    public static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(bf.readLine());
        dp = new int[N+1]; //
        dp[0] = 1;
        dp[1] = 3;
        for(int i=2;i<=N;i++){
            dp[i] = ((2 * dp[i-1]) + dp[i-2]) % MOD;
        }

        System.out.println(dp[N]);
    }
}

n = 1 -> 1

n = 2 -> 3

n = 3 -> 17

n = 4 -> 41

//์ ํ™”์‹
dp[n] = (dp[n-1] x 2) + dp[n-2]
๋ฐ˜์‘ํ˜•