티스토리 뷰

간단한 문제입니다. 

동적 프로그래밍의 개념을 알고 있다면 쉽게 해결할 수 있습니다.


기존의 동전문제와 다른 점은 1+3과 3+1 같이 순서를 구분한다는 점입니다. 


주어진 예시 입력값 4의 경우를 말씀드리겠습니다. 


이 문제는 1과 2와 3만을 이용해 합을 나타내는데 주목해주세요.

4는 다음의 합의 경우로 나타낼 수 있습니다. 


1+~~


2+~~


3+~~


의 3가지가 존재합니다. 


4의 경우 1+3을 만드는 가지수, 2+2를 만드는 가지수, 3+3을 만드는 가지수를 모두 더해 주면 된다는 의미입니다. 


점화식으로 나타내면 다음과 같습니다. 


f(n)=f(n-1)+f(n-2)+f(n-3)


동적 프로그래밍을 하기 위해서는 초기값이 필요합니다. 이 문제에서 사용할 초기값은 1을 만드는 가지수, 2를 만드는 가지수, 3을 만드는 가지수입니다. 


먼저 1, 2, 3을 가지고 1을 만드는 경우는 1가지 밖에 존재하지 않습니다. 즉, dp[1]=1이 됩니다.ㅏ 

2를 만드는 경우는 1+1과 2로 2가지의 경우가 존재합니다. dp[2]=2가 됩니다. 

3을 만드는 경우는 1+1+1, 1+2, 2+1, 3으로 4가지가 존재합니다.  dp[3]=4가 됩니다. 


이 초기값들을 이용해 코딩하면 문제를 해결할 수 있습니다.

아래는 제가 제출한 코드입니다.


#include <iostream>

using namespace std;

int main()
{
	int n;
	int T;
	int dp[11] = { 0 };

	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 4;

	for (int j = 4;j <= 10;j++) {
		dp[j] = dp[j - 1] + dp[j - 2] + dp[j - 3];
	}

	cin >> T;

	for (int i = 0;i < T;i++) {
		cin >> n;
		cout << dp[n] << endl;
	}

	return 0;
}



' Algorithm > 동적프로그래밍' 카테고리의 다른 글

백준 1932 정수 삼각형  (0) 2018.09.28
백준 1149 RGB거리  (0) 2018.09.28
백준 2294 동전2  (0) 2018.09.21
백준 3908 서로 다른 소수의 합  (0) 2018.09.21
백준 2293 동전1  (0) 2018.09.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함