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 |