Algorithm๐Ÿฅ‡

11726.2xnํƒ€์ผ๋ง

hae02y 2023. 11. 1. 00:37
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ 1×2, 2×1 ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค.

## ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— n์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 1,000)

## ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— 2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

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

๋ฌธ์ œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ทธ๋ ค๋ณด์ž.

ํ•˜์ด

n=4 ๊นŒ์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ์ผ์ •ํ•œ ํŒจํ„ด์ด ๋ฐ˜๋ณต๋œ๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋…ธ๋ž€๋ธ”๋Ÿญ์€ n-1 ์˜ ํƒ€์ผ์— ์„ธ๋กœ ํƒ€์ผ์ด 1๊ฐœ ์ถ”๊ฐ€๋˜๊ณ ,
๋นจ๊ฐ„๋ธ”๋Ÿญ์€ n-2์˜ ํƒ€์ผ์— ๊ฐ€๋กœํƒ€์ผ์ด 2๊ฐœ์”ฉ ์ถ”๊ฐ€๋œ๋‹ค.

์ด๋ฅผ dp๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด,

dp[n] = dp[n-1] + dp[n-2]

์˜ ์ ํ™”์‹์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

์ฝ”๋“œ

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class _2xnํƒ€์ผ๋ง {  

    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

        int n = Integer.parseInt(br.readLine());  

        int[] dp = new int[1002];  

        //bottom up ๋ฐฉ์‹ ์ ์šฉ  
        dp[1] = 1;  
        dp[2] = 2;  

        for(int i=3; i<=n; i++){  
            // mod ์—ฐ์‚ฐ์„ ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅํ• ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์—ฐ์‚ฐํ• ๋•Œ๋งˆ๋‹ค mod ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•œ๋‹ค.  
            // ๋งˆ์ง€๋ง‰์—๋งŒ mod์‹œ์— Overflow๊ฐ€ ๋ฐœ์ƒํ• ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ.  
            dp[i] = (dp[i-2] + dp[i-1]) % 10007;  
        }  

        System.out.println(dp[n]);  
        br.close();  
    }  
}

DP๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋‹ค๋ณด๋‹ˆ ๋‚˜์—๊ฒŒ๋Š” ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค. ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์„œ ์ƒ๊ฐํ•ด์•ผํ•˜๋Š”๋ฐ ๋ง‰์ƒ ๋งˆ์ฃผ์น˜๋ฉด ๋จธ๋ฆฌ๊ฐ€ ํ•˜์–˜์ง„๋‹ค. ๋” ์—ฐ์Šตํ•˜์ž.

๋ฐ˜์‘ํ˜•