본문 바로가기
알고리즘/문제 풀이

[Java] 백준 9095번 1, 2, 3 더하기

by _eunji_ 2020. 6. 24.

https://www.acmicpc.net/problem/9095

 

9095번: 1, 2, 3 더하기

문제 정수 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의 합으로 나타내는

www.acmicpc.net

문제 설명

  • 정수 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]);
		}
		
	}
}

댓글