문제
정수 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의 합으로 나타내는 방법의 수를 출력한다.
1부터 3까지는 수동으로 구해야 한다.
1일때 경우에 수는 1개
2일때는 경우에수는 2개
3일때는 경우에 수의 4개
4일떄의 개수는 3 + 2+ 1
이므로 n 일때 (n-1) + (n-2) + (n-3) 이라는 점화식이 성립하게 된다.
점화식을 처음에 도출해내는것이 힘들었지만 찾아내면 별로 어려운 문제는 아니였다
import java.util.Scanner;
public class Main {
static int d[];
public static int tile(int num) {
if(num == 1 ) return 1;
if(num == 2 ) return 2;
if(num == 3 ) return 4;
if(d[num] > 0) return d[num];
d[num] = tile(num-3)+tile(num-2) + tile(num-1);
d[num]= d[num]%10007;
return d[num];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
d = new int[12];
for(int i = 0 ; i< num ; i++) {
int tmp = sc.nextInt();
System.out.println(tile(tmp));
}
}
}
// 1. i+1,
'알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 level2 소수찾기 (0) | 2020.06.11 |
---|---|
프로그래머스 다음 큰 숫자 (0) | 2020.06.04 |
프로그래머스 가장 큰수 (정렬) (0) | 2020.05.26 |
프로그래머스 카펫(완전탐색) (0) | 2020.05.22 |
프로그래머스 큰 수 만들기(그리디) (0) | 2020.05.22 |
댓글