본문 바로가기

Java/백준

[JAVA] 백준 9461 파토반 수열

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

 

9461번: 파도반 수열

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

www.acmicpc.net

 

- 삼각형이 나선 모양으로 놓여져 있다.

- 첫 삼각형은 정삼각형으로 변의 길이는 1이다.

- 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다.

- 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 

 

- 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1,1,1,2,2,3,4,5,7,9이다.

- N이 주어졌을 때 P(N)을 구하는 프로그램

 

 

문제 풀이 

 

 

 

- 재귀 방식에 메모제이션 활용 

- 100의 경우 9000억 가까이 되기 때문에 int형 범위를 넘어섬

 

 

정답

 

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

public class Main {
	static long memo[] = new long[101];
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        memo[0]=0L;
        memo[1]=1L;
        memo[2]=1L;
        memo[3]=1L;
        
        int T = Integer.parseInt(br.readLine());
        
        for(int i=0; i<T; i++)
        {
        	StringTokenizer st = new StringTokenizer(br.readLine());
        	int n = Integer.parseInt(st.nextToken());
        	bw.write(df(n)+"");
        	bw.newLine();
        }
        
        bw.flush();
        bw.close();
    }
    
    public static long df(int n)
    {
    	if(memo[n]==0)
    	{
    		memo[n] = df(n-2) + df(n-3);
    	}
    	return memo[n];
    }
}

 

 

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 1932 정수 삼각형  (1) 2024.02.27
[JAVA] 백준 1912 연속합  (1) 2024.02.26
[JAVA] 백준 1904 01타일  (0) 2024.02.26
[JAVA] 백준 9184 신나는 함수 실행  (0) 2024.02.26
[JAVA] 백준 14889 스타트와 링크  (0) 2024.02.26