Preparing Coding Test/Baekjoon

[Java/백준/DP] 9461번: 파도반 수열

weero 2020. 10. 1. 23:32

문제

www.acmicpc.net/problem/9461

 

9461번: 파도반 수열

오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 �

www.acmicpc.net

 

코드

n==1일 때 부터 5까지는 예외이다. → 따로 Basic case인 걸로 했다.

그 이후 점화식은 D(n) = D(n-1) + D(n-5) 이다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

class Main{
	static long[] dp_arr = new long[101];
	public static long padovan(int n) {
		if(n==1 || n==2 || n==3)
			return 1;
		if(n==4 || n==5)
			return 2;
		if(dp_arr[n]!=0)
			return dp_arr[n];
		
		return dp_arr[n]=padovan(n-1)+padovan(n-5);
	}
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		int t = Integer.parseInt(br.readLine());
		
		for(int i=0; i<t; i++)
		{
			int n = Integer.parseInt(br.readLine());
			
			sb.append(padovan(n)+"\n");
		}
		
		
		bw.write(new String(sb));
		bw.flush();
	}
}