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

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

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

๋ฌธ์ œ 

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

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

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

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

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

  • X

2×n ํƒ€์ผ๋ง์ด๋ž‘ ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ๋น„์Šทํ•ด์„œ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค..!

์ฝ”๋“œ

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

public class BOJ11727 {
    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์ผ ๋•Œ, ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐœ์ˆ˜๊ฐ€ 3์ด๋ฏ€๋กœ
        // ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ ๊ฐ’์„ 1๋กœ, 2๋ฒˆ์งธ ๊ฐ’์„ 3์œผ๋กœ ์ดˆ๊ธฐํ™”
        sqr[1] = 1;

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

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

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