문제 출처 - Baekjoon Online Judge
문제는 여기
[문제]
꿍은 군대에서 진짜 할짓이 없다. 그래서 꿍만의 피보나치를 만들어보려고 한다. 기존의 피보나치는 너무 단순해서 꿍은 좀더 복잡한 피보나치를 만들어보고자 한다. 그래서 다음과 같은 피보나치를 만들었다. 꿍만의 피보나치 함수가 koong(n)이라고 할 때,
n < 2 : 1
n = 2 : 2
n = 3 : 4
n > 3 : koong(n − 1) + koong(n − 2) + koong(n − 3) + koong(n − 4)
이다.
여러분도 꿍 피보나치를 구해보아라.
[입력]
입력의 첫 번째 줄을 테스트 케이스의 개수 t (0 < t < 69)가 주어진다. 다음 t줄에는 몇 번째 피보나치를 구해야하는지를 나타내는 n(0 ≤ n ≤ 67)이 주어진다.
[출력]
각 테스트 케이스에 대해, 각 줄에 꿍 피보나치값을 출력하라.
[풀이]
1. dp 배열을 만들어 초기값을 넣어준다.
2. dp 배열을 채워준다.
3. t만큼 반복을 돌며 결과를 출력한다.
[접근]
1. 피보나치와 같은 방식으로 주어진 식에 맞춰서 문제를 해결하면 되겠다고 생각하였다.
[코드]
import java.io.*;
import java.util.*;
public class Main {
static int n, t;
static long dp[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
t = Integer.parseInt(br.readLine());
dp = new long[70]; // 넉넉잡아 70개
// 초기값 설정
dp[0] = dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
// dp 배열 채우기
for (int i = 4; i < 70; i++) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] + dp[i - 4];
}
// 해당 값 출력
for (int T = 0; T < t; T++) {
System.out.println(dp[Integer.parseInt(br.readLine())]);
}
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S1 17271번 리그 오브 레전설 (Small) (JAVA) (0) | 2022.09.14 |
---|---|
[백준] S2 18353번 병사 배치하기 (JAVA) (0) | 2022.09.12 |
[백준] S5 13301번 타일 장식물 (JAVA) (0) | 2022.09.05 |
[백준] S2 15988번 1, 2, 3 더하기 3 (JAVA) (0) | 2022.09.04 |
[백준] S1 16194번 카드 구매하기 2 (JAVA) (0) | 2022.08.31 |