• 문제 링크
9461번: 파도반 수열
오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의
www.acmicpc.net
• 풀이 과정
문제에서 주어진 파도반 수열 p(1) ~ p(10) 의 변의 길이는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9 이다.
이때 n < 6 까지는 불규칙한 수열이므로 미리 값을 메모이제이션해주고,
그 이후부터는 점화식 dp[i] = dp[i -1] + dp[i - 5] 이 성립하는 규칙성을 지니고 있다.
따라서 n 의 범위가 1 <= n < 100 으로 작은 수준이므로 미리 파도판 수열의 값을 구해 메모이제이션한 후,
테스트 케이스 당 입력 n 에 해당하는 dp(n) 을 정답으로써 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
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];
int t = Integer.parseInt(br.readLine());
while (t-- > 0)
bw.write(dp[Integer.parseInt(br.readLine())] + "\n");
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 9251 LCS - Dynamic Programming / Java (0) | 2022.11.10 |
---|---|
[백준] 2565 전깃줄 - Dynamic Programming / Java (0) | 2022.11.09 |
[백준] 1904 01타일 - Dynamic Programming / Java (0) | 2022.11.07 |
[백준] 9184 신나는 함수 실행 - Dynamic Programming / Java (0) | 2022.11.06 |
[백준] 5430 AC - Data Structure / Java (0) | 2022.11.05 |
댓글