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

[Java] BOJ 9461 ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด

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

๋ฌธ์ œ 

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

  • ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‚ผ๊ฐํ˜•์ด ๋‚˜์„  ๋ชจ์–‘์œผ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค.
  • ์ฒซ ์‚ผ๊ฐํ˜•์€ ์ •์‚ผ๊ฐํ˜•์œผ๋กœ ๋ณ€์˜ ๊ธธ์ด๋Š” 1์ด๋‹ค.
  • ๊ทธ ๋‹ค์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ •์‚ผ๊ฐํ˜•์„ ๊ณ„์† ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋‚˜์„ ์—์„œ ๊ฐ€์žฅ ๊ธด ๋ณ€์˜ ๊ธธ์ด๋ฅผ k๋ผ ํ–ˆ์„ ๋•Œ, ๊ทธ ๋ณ€์— ๊ธธ์ด๊ฐ€ k์ธ ์ •์‚ผ๊ฐํ˜•์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, P(N)์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด P(N)์€ ๋‚˜์„ ์— ์žˆ๋Š” ์ •์‚ผ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด์ด๋‹ค. P(1)๋ถ€ํ„ฐ P(10)๊นŒ์ง€ ์ฒซ 10๊ฐœ ์ˆซ์ž๋Š” 1, 1, 1, 2, 2, 3, 4, 5, 7, 9์ด๋‹ค.
  • ์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100)
  • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค P(N)์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

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

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

  • X

๊ทœ์น™ ์ฐพ๋Š” ๋ฌธ์ œ ์žฌ๋ฐŒ๋‹น ใ…Žใ…Ž

์ฝ”๋“œ

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

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

        // ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜
        int T = Integer.parseInt(br.readLine());

        for(int test = 0; test < T; test++){
            int N = Integer.parseInt(br.readLine());

            // ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด์„ ์ €์žฅํ•  ๋ฐฐ์—ด
            long tri[] = new long[N + 1];

            // ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด์˜ 1๋ฒˆ๋ถ€ํ„ฐ 3๋ฒˆ๊นŒ์ง€๋Š” ๋ชจ๋‘ ๊ฐ’์ด 1์ด๊ธฐ ๋•Œ๋ฌธ์—
            // 1, 2, 3๋ฒˆ์งธ ๋ฐฐ์—ด์„ 1๋กœ ์ดˆ๊ธฐํ™”
            tri[1] = 1;

            if(N > 1){
                tri[2] = 1;
            }

            if(N > 2){
                tri[3] = 1;
            }

            // 4๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฐ˜๋ณต
            for(int i = 4; i <= N; i++){
                // i๋ฒˆ์งธ ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด์€ i-2๋ฒˆ์งธ์™€ i-3๋ฒˆ์งธ ์ˆ˜์—ด ๊ฐ’์„ ํ•ฉํ•œ ๊ฐ’
                tri[i] = tri[i - 2] + tri[i - 3];
            }

            sb.append(tri[N] + "\n");
        }
        System.out.println(sb);
    }
}