baekjoon/DP

백준 9461번 : 파도반 수열 자바

Meluu_ 2024. 8. 24. 16:07

 

 

 

🧫 문제 분석

 

✔️ 출처

파도반 수열 실버 3

 

📖 문제

 

 

DP문제다. 

중복 연산이 포함되어있다. 

 

12번째는 12 + 4 로 

번호를 매겨보면 

11번째 + 7번째 를 더한 것이다. 

 

그런데 4또한 3 + 1이며 

번호를 매겨보면

6번째 + 2번째 를 더한 것이다. 

 

 

이를 점화식으로 보면

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

 

 이렇게 볼 수 있다. 

 

이전값 + dp[n-5] 가 아닌 이유는 

이전 값 또한 어떠한 숫자들의 덧셈 결과일 수 있기 때문이다. 

 

 


🔅 문제 풀이

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T = Integer.parseInt(br.readLine());
        long[] dp = new long[101];

        dp[1] = dp[2] = dp[3] = 1;
        dp[4] = dp[5] = 2;

        for (int i = 6; i <= 100; i++) {
            dp[i] = dp[i - 1] + dp[i - 5];
        }


        for (int i = 0; i < T; i++) {
            int n = Integer.parseInt(br.readLine());
            bw.write(dp[n] + "\n");
        }

        bw.flush();
        bw.close();
    }

}

 

 

 

❗ 오답노트 / 필요한 지식

  1.  간단한 DP문제