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

백준 1,2,3, 더하기(동적 프로그래밍)

by y00ns00 2020. 6. 2.

 

 

 

문제

정수 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의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.

출력

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

 

 

1부터 3까지는 수동으로 구해야 한다.

1일때 경우에 수는 1개

2일때는 경우에수는 2개

3일때는 경우에 수의 4개

4일떄의 개수는 3 + 2+ 1

이므로 n 일때 (n-1) + (n-2) + (n-3) 이라는 점화식이 성립하게 된다.

 

점화식을 처음에 도출해내는것이 힘들었지만 찾아내면 별로 어려운 문제는 아니였다

 

 

import java.util.Scanner;
public class Main {
	static int d[];
	public static int tile(int num) {
		 if(num == 1 ) return 1;
		 if(num == 2 ) return 2;
		 if(num == 3 ) return 4;
		 if(d[num] > 0) return d[num];
		 
		 d[num] = tile(num-3)+tile(num-2) + tile(num-1);
		
		d[num]= d[num]%10007;
		
		return d[num];
		
		
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int num = sc.nextInt();
		
		
		d = new int[12];
		
		for(int i = 0 ; i< num ; i++) {
			int tmp = sc.nextInt();
			
			
			System.out.println(tile(tmp));
		}
		
		
		
	
	}

}

// 1. i+1,

댓글