본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 9461번] 파도반 수열(JAVA)

by 테크케찰 2020. 8. 4.

https://www.acmicpc.net/problem/9461

 

9461번: 파도반 수열

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

www.acmicpc.net

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

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

 이 문제의 규칙을 찾으시면 문제의 해결 방법은 간단합니다.

삼각형을 따라서 그려보면 삼각형의 변의 길이는 아래와 같이 이어집니다.

1 1 1 2 2 3 4 5 7 9 12 ...

n번째 숫자의 값을 num[n]이라고 하면 num[n]=num[n-1]+num[n-5]가 됩니다.

이를 바탕으로 100번째 숫자까지 값을 배열에 저장한 후, for문을 통해서 원하는 인덱스의 값을 꺼내어 출력해주면 됩니다.