https://www.acmicpc.net/problem/9095
문제 설명
- 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하기
- T : 테스트 케이스 개수
- n : 양수, 11보다 작다
배열 dp [n]은 n을 1,2,3의 합으로 나타내는 방법의 수를 의미한다.
우선 n은 11보다 작으니 배열 dp []의 크기를 int [11]로 초기화한다.
규칙을 찾기 위해 n이 1부터 5까지 증가할 때의 경우의 수를 생각해보면 다음과 같다.
n | dp[n] | 경우 |
1 | 1 | 1 |
2 | 2 | 1+1 2 |
3 | 4 | 1+1+1 2+1 1+2 3 |
4 | 7 | 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 3+1 1+3 |
5 | 13 | 1+1+1+1+1 2+1+1+1 1+2+1+1 1+1+2+1 1+1+1+2 2+2+1 1+2+2 2+1+2 3+1+1 1+3+1 1+1+3 3+2 2+3 |
위 표를 보면 n이 1부터 증가할때 dp [n]은 1,2,4,7,13..으로 증가한다.
따라서 다음과 같은 규칙을 발견할 수 있다.
dp[n] = dp [n-3] + dp [n-2] +dp [n-1]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
int T = s.nextInt();
int dp[] = new int[11];
//초기화
dp[1]=1; //1
dp[2]=2; //1+1,2
dp[3]=4;//1+1+1,2+1,1+2,3
for(int i=4;i<11;i++) {
dp[i]=dp[i-3]+dp[i-2]+dp[i-1];
}
for(int i=0;i<T;i++) {
int N = s.nextInt();
System.out.println(dp[N]);
}
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스>코딩테스트 연습>신규 아이디 추천 (0) | 2021.07.12 |
---|---|
[python] 백준 2750번 수 정렬하기 (0) | 2021.05.04 |
[Java] 백준 1904번 01타일 (0) | 2020.06.05 |
[Java] 백준 1520번 내리막 길 (0) | 2020.06.03 |
[Java] 백준 1010번 다리 놓기 (0) | 2020.06.03 |
댓글