๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 11726 2×n ํƒ€์ผ๋ง

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 29.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/11726

  • 2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ 1×2, 2×1 ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค. 
  • ์ฒซ์งธ ์ค„์— n์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n ≤ 1,000)
  • ์ฒซ์งธ ์ค„์— 2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 10,007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  n + 1 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ฐ€๋กœ๊ฐ€ 1์ผ๋•Œ๋Š” ๋ฐฉ๋ฒ•์ด 1๊ฐ€์ง€, ๊ฐ€๋กœ๊ฐ€ 2์ผ๋•Œ๋Š” ๋ฐฉ๋ฒ•์ด 2๊ฐ€์ง€์ด๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์€ 1, ๋‘๋ฒˆ์งธ ๊ฐ’์€ 2๋กœ ์ดˆ๊ธฐํ™”ํ•จ
  • 3๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, ๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ i์ธ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€๋กœ๊ฐ€ (i - 1)์ธ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ€๋กœ๊ฐ€ (i - 2)์ธ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์„ ํ•ฉํ•œ ๊ฐ’๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ๋‘ ๊ฐ’์„ ๋”ํ•œ๋‹ค.
  • ๋‘ ๊ฐ’์„ ๋”ํ•œ ๊ฐ’์— 10007์„ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ i๋ฒˆ์งธ ๊ฐ’์— ์ €์žฅํ•œ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X

์ด์ œ ์‰ฌ์šด dp๋Š” ์–ด๋Š์ •๋„ ํ’€ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์•„ ๊ธฐ์˜๋‹ค! ใ…Žใ…Ž

์ฝ”๋“œ

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

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

        // ํƒ€์ผ์˜ ๊ฐ€๋กœ ๊ธธ์ด
        int n = Integer.parseInt(br.readLine());

        // ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
        int sqr[] = new int[n + 1];

        // ๊ฐ€๋กœ๊ฐ€ 1์ผ ๋•Œ ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜๋Š” 1, ๊ฐ€๋กœ๊ฐ€ 2์ผ๋•Œ ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜๋Š” 2์ด๋ฏ€๋กœ
        // ๋ฐฐ์—ด 1๋ฒˆ์งธ ๊ฐ’์€ 1, ๋ฐฐ์—ด 2๋ฒˆ์งธ ๊ฐ’์€ 2๋กœ ์ดˆ๊ธฐํ™”
        sqr[1] = 1;

        if(n > 1){
            sqr[2] = 2;
        }

        // 3๋ฒˆ์งธ๋ถ€ํ„ฐ n๋ฒˆ๊นŒ์ง€ ๋ฐ˜๋ณต
        for(int i = 3; i <= n; i++){
            // ๊ฐ€๋กœ์˜ ๊ธธ์ด๊ฐ€ i์ผ๋•Œ ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜๋Š”
            // ๊ฐ€๋กœ์˜ ๊ธธ์ด i - 1์ผ๋•Œ ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜์™€ i - 2์ผ๋•Œ ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜ ํ•ฉ๊ณผ
            // ๊ฐ™์œผ๋ฏ€๋กœ ๋‘ ๊ฐ’์„ ๋”ํ•ด์ค€ ๋’ค 10007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๊ตฌํ•จ
            sqr[i] = (sqr[i - 1] + sqr[i - 2])%10007;
        }

        System.out.println(sqr[n]);
    }
}