문제
https://www.acmicpc.net/problem/9095
문제 설명
문제 풀이
정수 4를 1, 2, 3의 합으로 나타내는 방법을 보자
- 1 + 1 + 1 + 1
- 1 + 1 + 2
- 1 + 2 + 1
- 1 + 3
- 2 + 1 + 1
- 2 + 2
- 3 + 1
이걸 좀 있어보이게 나타내면 아래 표와 같다. 어떻게 작은 문제로 나눠야 하는지 보일 것이다.
n | 식 | 나타내는 방법 |
4 | 1 + (n - 1) | 1 + (1 + 1 + 1) |
1 + (1 + 2) | ||
1 + (2 + 1) | ||
1 + 3 | ||
2 + (n - 2) | 2 + (1 + 1) | |
2 + 2 | ||
3 + (n - 3) | 3 + 1 |
n에서 1, 2, 3을 빼고 남은 수를 다시 1, 2, 3의 합으로 나타내면 n을 1, 2, 3으로 나타내는 방법의 수를 알아낼 수 있다.
코드
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int[] memo = new int[11];
memo[0] = 1;
memo[1] = 1;
/*정수 입력*/
for(int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
/*1로 만드는 방법의 수 계산*/
for(int i = 2; i <= 10; i++) {
if(i == 2) {
memo[i] = memo[i - 2] + memo[i - 1];
}
else {
memo[i] = memo[i - 3] + memo[i - 2] + memo[i - 1];
}
}
/*출력*/
for(int i = 0; i < n; i++) {
System.out.println(memo[arr[i]]);
}
}
}
'🧑💻코딩 테스트 > 백준 (BOJ)' 카테고리의 다른 글
[코딩테스트/백준 알고리즘] 11052번 : 카드 구매하기 (자바, Java 풀이) (0) | 2022.08.31 |
---|---|
[코딩테스트/백준 알고리즘] 1676번 : 팩토리얼 0의 개수 (자바, Java 풀이) (0) | 2022.08.31 |
[코딩테스트/백준 알고리즘] 11727번 : 2 X n 타일링 2 (자바, Java 풀이) (0) | 2022.08.30 |
[코딩테스트/백준 알고리즘] 11726번 : 2×n 타일링 (자바, Java 풀이) (0) | 2022.08.29 |
[코딩테스트/백준 알고리즘] 1463번 : 1로 만들기 (Java, 자바 풀이) (0) | 2022.08.29 |
댓글