알고리즘

C++ 알고리즘 - 백준 9095 1, 2, 3 더하기 (다이나믹 프로그래밍)

마루설아 2025. 1. 5. 20:28

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

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

int main(void) {
	/************** C++ Init **************/
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	/************** C++ Init **************/


	int input1, input2;
	vector<int> v;

	v.push_back(0);
	v.push_back(1);
	v.push_back(2);
	v.push_back(4);

	for (int i = 4; i < 11; i++) {
		v.push_back(v[i - 3] + v[i - 2] + v[i - 1]);
	}

	cin >> input1;

	for (int i = 0; i < input1; i++) {
		cin >> input2;
		cout << v[input2] << endl;
	}
}

 

문제 상에는 1, 2, 3의 합으로 나타낼 수 있는 수를 구하라고 하여,

 

1 = 0

2 = 1 (1+1)

3 = 3 (1+1+1 , 1+2 , 2+1)

... 로 생각하여 답을 찾는데 시간이 걸렸다.

 

1 = 1 (1)

2 = 2 (1+1 , 2)

3 = 4 (1+1+1 , 1+2 , 2+1 , 3)

... 로 생각을 하니, 답을 찾을 수 있었다.

 

4 = 1 + 2 + 4 = 7

5 = 2 + 4 + 7 = 13

6 = 4 + 7 + 13 = 24

7 = 7 + 13 + 24 = 44

...