-
백준 9095번 1,2,3 더하기(java) - DP코딩테스트 2021. 6. 1. 16:34
이 문제는 규칙을 찾는게 중요하다.
1 = 1
2 = (1+1) , 2
3 = (1+1+1), (1+2), (2+1), 3
4 = (1+1+1+1) (1+1+2) (1+2+1) (1+3) , (2+1+1) (2+2), (3+1)
이렇게 보면 3의 모든 경우의 앞에 1을 더해주고, 2의 모든 경우에 2를 더해주고, 1의 모든 경우에 3을 더해주면 4의 경우의 수가 나온다. 5도 마찬가지로 해보면 2의 경우에 3을 더하고, 3의 경우에 2를 더하고, 4의 경우에 1을 더해주면 5의 모든 경우의 수가 나온다.
즉, n을 1,2,3의 합으로 나타내는 방법의 수는 [n-1], [n-2], [n-3]의 경우의 수를 모두 합친 것이다.
import java.util.Scanner; public class Test { static int[] dp = new int[11]; public static void main(String args[]) { Scanner scanner = new Scanner(System.in); int testCase = scanner.nextInt(); int[] n = new int[testCase]; for(int i = 0; i < testCase; i++) { n[i] = scanner.nextInt(); } for (int j = 0; j < n.length; j++) { System.out.println(result(n[j])); } } static int result(int n) { dp[0] = 0; dp[1] = 1; dp[2] = 2; dp[3] = 4; if(dp[n] != 0) return dp[n]; if(n >= 4) { dp[n] = result(n - 3) + result(n - 2) + result(n - 1); } return dp[n]; } }
'코딩테스트' 카테고리의 다른 글
백준 2583번 영역 구하기(자바) - dfs, bfs (0) 2021.06.10 백준 1003번 피보나치 함수(자바) - DP (0) 2021.06.07 백준 1463번 1로 만들기(java) - 다이나믹 프로그래밍, bfs (0) 2021.06.01 백준 11399번 ATM - 그리디 알고리즘(자바) (0) 2021.06.01 백준 2839번 설탕 배달(Java) - 그리디 알고리즘 (0) 2021.04.26