
DP문제 중에서도 쉬운편에 속하는 문제인것같다.
정답 비율이 62%나 되는 걸 보니?ㅋㅋ
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 문제이다.
결론적으로 점화식은
arr[n] = arr[n-3] + arr[n-2] + arr[n-1] 이 된다.
예를 들어 n이 10이라고 했을 때 1, 2, 3의 합으로 10이 될 수 있는 수는
10-1, 10-2, 10-3인 9, 8, 7 이기 때문에 이들의 경우의 수를 합치면 10의 방법의 수가 나온다.
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// n은 양수이며 11보다 작다.
int[] caseArr = new int[11];
int cnt = Integer.parseInt(reader.readLine().toString());
caseArr[1] = 1;
caseArr[2] = 2;
caseArr[3] = 4;
for(int i=4; i< caseArr.length; i++){
caseArr[i] = caseArr[i-3] + caseArr[i-2] + caseArr[i-1];
}
while(cnt > 0) {
int testCase = Integer.parseInt(reader.readLine().toString());
System.out.println(caseArr[testCase]);
cnt--;
}
reader.close();
}
}
테스트 케이스의 범위가 좁아서 아예 처음부터 배열을 다 계산 해놓고
입력받아서 테스트 케이스 배열에 값을 뽑아줬다.
처음에는 막막햇는데 공부할수록 문제가 풀리니까 재미있게 느껴진다.
행복하다~~~
'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [백준] 16194번 카드 구매하기 2 JAVA (0) | 2021.05.16 |
|---|---|
| [백준] 11052번 카드 구매하기 JAVA (0) | 2021.05.13 |
| [백준] 1463번 1로 만들기 JAVA (0) | 2021.05.06 |
| [프로그래머스] 완주하지 못한 선수 JAVA (0) | 2021.04.30 |
| [백준] 17103번 골드바흐 파티션 JAVA (0) | 2021.04.29 |