9095번: 1, 2, 3 더하기
https://www.acmicpc.net/problem/9095
# 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
int[] dp = new int[11];
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (int i = 4; i <= 10; i++) {
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
}
for (int j = 0; j < t; j++) {
int n = Integer.parseInt(br.readLine());
sb.append(dp[n]).append("\n");
}
System.out.print(sb);
}
}
- 우선 1, 2, 3을 만들 수 있는 경우의 수는 다음과 같다.
- 1 = {1} ----- 1개
- 2 = {1+1, 2} ----- 2개
- 3 = {1+1+1, 1+2, 2+1, 3} ----- 4개
- 그렇다면 4는 어떻게 만들 수 있을까? 고정된 수 세 개를 이용해 우선 4를 만들어 보려 한다면 4= 1+3 / 2+2 / 3+1이 된다. 즉 1, 2, 3의 각 경우의 수에 +1, +2, +3을 해주기만 하면 4를 만들 수가 있는 것이다. 각 경우의 수에 1, 2, 3만을 더해주므로 전체적인 경우의 수는 변합이 없게 되고 결과적으로 4 + 2 + 1로 7개라는 경우의 수가 발생한다.
- 또 5를 예로 들어 보면 5 = 1+4 / 2+3 / 3+2로 5를 만들 수 있다. 즉 4의 경우의 수에 +1, 3의 경우의 수에 +2, 2의 경우의 수에 +3만 해주면 5를 만들 수 있다. 최종적으로 5의 경우의 수는 7 + 4 + 2로 13이 된다.
- 이를 통해 점화식을 유추해보면 dp[n] = dp[n-1] + dp[n-2] + dp[n-3]이라는 식을 세울 수 있다.
풀이는 아래 블로그를 참고했다.
[백준,BOJ 9095] 1, 2, 3 더하기( JAVA 구현)
-해법 dp문제는 풀어도 풀어도 풀이를 봐도 이해가 안 간다.. ㅋㅋㅋㅋ 재능이 없는 건가 이 문제의 경우 1, 2, 3이 고정적으로 이용된다. 그렇기 때문에 우선 1, 2, 3을 만들 수 있는 경우의 수를 만
fbtmdwhd33.tistory.com
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[CLASS 3: DP] 백준 9461 파도반 수열 (0) | 2024.10.28 |
---|---|
[CLASS 3: 자료구조] 백준 9375 패션왕 신해빈 (0) | 2024.10.27 |
[CLASS 3: BFS] 백준 2606 바이러스 (0) | 2024.10.25 |
[CLASS 3: DP] 백준 2579 계단 오르기 (0) | 2024.10.24 |
[CLASS 3: DP] 백준 1463 1로 만들기 (0) | 2024.10.23 |