본문 바로가기
알고리즘

[Java] 백준 9461번 (Dynamic Programming)

by 태풍사랑 2020. 5. 8.

www.acmicpc.net/problem/9461

 

9461번: 파도반 수열

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

www.acmicpc.net

풀이


변의 길이가 1인 정삼각형에서 시작하여 변을 이어가며 정삼각형을 그리는 문제

P(1) = 1, P(2) = 1, P(3) = 1, P(4) = 2, P(5) = 2 ... P(11) = 12까지 예시가 주어져있다.

 

위 규칙을 통해 P(N) = P(N-1) + P(N-5) 를 알 수 있다

P(1) ~ P(5)일 경우는 예외로 두고 N = 6일때부터 풀었다

 

cf) N이 100까지로 한정되어 있기때문에 이 범위가 int의 범위를 벗어나는지를 체크해보고 넘어가야 한다

 

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

//https://www.acmicpc.net/problem/9461
public class algo_9461_dp {

	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		long[] P = new long[101];
		P[1] = 1; P[2] = 1; P[3] = 1; P[4] = 2; P[5] = 2;
		
		for(int i = 6; i<= 100; i++) {
			P[i] = P[i-1] + P[i -5];
		}
		
		int T = Integer.parseInt(br.readLine());
		
		for(int i = 0; i < T; i++) {
			int N = Integer.parseInt(br.readLine());
			bw.write(P[N] + "\n");
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}

댓글