백준_1,2,3 더하기_동적계획법(java)
2019. 3. 5. 22:21ㆍ알고리즘문제/백준
1. 문제
https://www.acmicpc.net/problem/9095
정수 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의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
solution )
역시 넘 어렵당,,,,,, 다른 블로그 참고 !!!
R[i] = R[i-3] + R[i-2] + R[i-1]
예를 들어 숫자 5가 주어졌을 때,
사용하는 첫 숫자가 1이라면 (5-1=4) 4를 구하는 방법의 경우의 수와
첫 숫자가 2라면 (5-2=3) 3을 구하는 방법의 경우의 수
첫 숫자가 3라면 (5-3=2) 2를 구하는 방법의 경우의 수를 더하면 된다고 한다.
이는 사용할 수 있는 숫자가 1,2,3 이렇게 세가지뿐이여서 가능한 방법,,, 뚜잉 ㅜ
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 30 | import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] res = new int[11]; res[0] = 1; res[1] = 1; res[2] = 2; res[3] = 4; int T = sc.nextInt(); for(int i = 0; i < T; i++) { int n = sc.nextInt(); for(int j = 0; j <= n; j++) { if(j>3) { res[j] = res[j-3] + res[j-2] + res[j-1]; } } System.out.println(res[n]); } sc.close(); } } | cs |
error ) 런타임에러 발생 및 큰 숫자 (44도 그럼) 나오는 순간 값이 음수가 나온다,, n이 11이하라는 조건 무시하고 출력해봄,,
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 30 31 | import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int count = sc.nextInt(); int[] arr = new int[count]; for(int i = 0; i < count; i++) { arr[i] = sc.nextInt(); } for(int i = 0; i < count; i++) { int[] res = new int[arr[i]+1]; res[0] = 1; res[1] = 1; res[2] = 2; res[3] = 4; for(int j = 0; j <= arr[i]; j++) { if(j>3) { res[j] = res[j-3] + res[j-2] + res[j-1]; } } System.out.println(res[arr[i]]); } sc.close(); } } | cs |
'알고리즘문제 > 백준' 카테고리의 다른 글
백준_인싸들의 가위바위보[Java] (0) | 2019.04.03 |
---|---|
백준_Count Circle Groups_그래프_10216(Java) (0) | 2019.03.22 |
백준_피보나치 3_2749(java) (0) | 2019.03.09 |
백준_피보나치함수_(1003)_동적계획법(java) (0) | 2019.03.09 |
백준_1로만들기_동적계획법(java) (0) | 2019.03.03 |