백준 1 2 3 더하기 9095 DP

CJB_ny·2022년 12월 16일
0

백준

목록 보기
6/104
post-thumbnail

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

일단 또 문제를 제대로 처 안읽음 + 빡대가리임.

일단

이렇게 싹다 적어서 규칙을 찾아준다.

DP로 풀기

#include <iostream>
#include <cstring>
using namespace std;

int input;
int cache[12];

int SumPath(int num)
{
	// 기저
	if (num == 1) return 1;
	if (num == 2) return 2;
	if (num == 3) return 4;

	// 캐시
	int& ret = cache[num]; 
	if (ret != -1) return ret;

	// 구하기
	return ret = SumPath(num - 1) + SumPath(num - 2) + SumPath(num - 3);
}

int main()
{
	memset(cache, -1, sizeof(cache));

	int loop;
	cin >> loop;
	
	for (int i = 0; i < loop; ++i)
	{
		cin >> input;
		cout << SumPath(input) << endl;;
	}

	return 0;
}

반복문으로

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

int main()
{
	int T, n;
	cin >> T;

	vector<int> dp(12, 0);
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 4;
	for (int i = 4; i < 12; ++i)
		dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];

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

	return 0;
}
profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글