본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 2302번 극장 좌석

by 현장 2026. 2. 12.

-Code

import java.io.*;

public class BOJ2302 {
    static int[] dp = new int[41];
    static {
        dp[0] = 1;
        dp[1] = 1;

        for (int i = 2; i <= 40; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));

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

        int cnt = Integer.parseInt(br.readLine());
        int answer = 1;
        int before = 1;
        for (int i = 0; i < cnt; i++) {
            int vip = Integer.parseInt(br.readLine());
            int nowRange = vip - before;
            // vip 다음 위치 부터 시작해야 하므로 +1
            before = vip + 1;
            answer *= dp[nowRange];
        }
        // 마지막 끝값이므로 + 1로 처리하여 범위를 맞춰줌
        answer *= dp[range - before + 1];
        System.out.println(answer);
    }
}

dp를 계산할 때 피보나치의 수인 것은 알아서 처음에 구현을 하고 예제에 맞는 입출력이 나왔으나 틀렸었습니다. 그래서 찾아보니 0인 경우인 자기 자신 하나만 포함된 경우에도 계산을 해줘야 하는데 dp를 1부터 계산하여 틀렸었습니다.