문제
정수 4를 1, 2, 3의 조합으로 나타내는 방법은 총 7가지가 있다.
- 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의 합으로 나타내는 방법의 수를 출력한다.
예제 입력
3
4
7
10
예제 출력
7
44
274
[코드]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int cnt = sc.nextInt(); int[] nums = new int[12]; nums[1] = 1; nums[2] = 2; nums[3] = 4; for(int i = 4 ; i <= 11; i++){ for(int j = 1; j <= 3; j++) { nums[i] += nums[i-j]; } } while(cnt-->0){ int n = sc.nextInt(); System.out.println(nums[n]); } } } | cs |
[알고리즘]
다이나믹 프로그래밍은 규칙성을 얼마나 잘 찾느냐에 따라 달려있는 것 같다.
처음에 숫자 1,2,3 각각을 만들 수 있는 조합의 수를 잘못 생각해서 계속 풀리지 않았었다.
중간에 숫자가 잘 맞아 떨어졌으면 점화식을 발견할 수도 있었을텐데
2를 만들 수 있는 건 1+1 과 2 인데, 1+1 만 생각하고 있었다.
nums[2] 를 계속 1 로 두고 nums[3] 과의 연관성을 찾으려니 답이 안나올수 밖에...ㅜㅜㅜ
너무 안풀려서 힌트를 얻어볼까 하고 질문검색에 갔다가 우선 2를 만들수 있는 개수 부터가 잘못됐다는 걸 알았고,
나도 모르게 점화식을 봐버렸다;
알고나니 너무 허무하다... 다른 좋은 풀이법이 딱히 있는 것도 아닌 것 같고 ㅠㅠ
다이나믹 프로그래밍을 조금 더 잘하는 날까지...ㅠㅠㅠ흐엉 다음번에는 제대로 혼자 규칙을 완벽히 찾고 싶다 ㅠ_ㅠ
'공부 > 알고리즘' 카테고리의 다른 글
백준1238_파티 (0) | 2017.03.09 |
---|---|
백준1260_DFS와 BFS (0) | 2017.03.09 |
백준1152_단어의 개수 (0) | 2017.01.11 |
백준1916_최소비용 구하기 (2) | 2017.01.09 |
백준1475_방번호 (0) | 2017.01.04 |
댓글