728x90
1 초 (추가 시간 없음) | 512 MB | 92598 | 60709 | 41315 | 63.932% |
문제
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
https://www.acmicpc.net/problem/9095
어떻게 풀 것인가?
이 문제를 보자마자 나는 피보나치 수열를 떠올렸다. 즉, DP로 풀어야겠다는 생각을 하였다.
그래서 이번에는 TOPDOWN 방식을 이용한 재귀방식으로 풀었는데,
경우의 수를 고려하였을때,
1 -> (1) -> 1개
2 -> (1+1), (2) -> 2개
3 -> (1+1+1), (1+2), (2+1), (3) -> 4개
이런식으로 1~3까지의 경우를 구해서 구하였고,
점화식으로는 (n > 3) 일때, f(n) = f(n-1) + f(n-2) + f(n-3)이 나온다.
내 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
// 백준알고리즘 9095번 1,2,3 더하기
public class Main {
static int T;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
int num = Integer.parseInt(br.readLine());
sb.append(solve(num)).append('\n');
}
System.out.println(sb);
}
public static int solve(int n) {
if (n == 1)
return 1;
else if (n == 2)
return 2;
else if (n == 3)
return 4;
else
return solve(n - 1) + solve(n - 2) + solve(n - 3);
}
}
728x90
'BaekJoon' 카테고리의 다른 글
[백준 알고리즘] 17609번 : 회문 (JAVA) 문제 풀이 (0) | 2023.01.18 |
---|---|
[백준 알고리즘] 10816번 : 숫자 카드 2 (JAVA) 문제 풀이 (0) | 2023.01.18 |
[백준 알고리즘] 16637번 : 괄호 추가하기 (JAVA) 문제 풀이 (0) | 2023.01.17 |
[백준알고리즘] 2293번 동전 1 (JAVA) 문제 풀이 (0) | 2023.01.17 |
[백준 알고리즘] 20291번 : 파일 정리 (JAVA) 문제 풀이 (0) | 2023.01.15 |