[BOJ-Code] 15989 - 1, 2, 3 더하기 4

Posted by DHniyeo Blog on August 16, 2024

문제 링크

💡 다이나믹 프로그래밍

Memory 2060KB Time 16ms Code Length 386B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string.h>
using namespace std;

int dp[10004];
int T;

int main() {
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		memset(dp, 0, sizeof(dp));
		for (int i = 1; i <= 3; i++) { // 각 숫자마다 반복
			dp[i]++;
			for (int j = i + 1; j <= n; j++) { // i 보다 큰 dp 테이블 생성하기
				dp[j] += dp[j-i];
			}
		}
		cout << dp[n] << "\n";
	}
}

이 코드는 T번의 테스트 케이스를 입력 받고, 각 테스트 케이스마다 n을 입력 받는다. 그 후, 1부터 3까지의 숫자에 대해 dp 배열을 초기화하고, 각 숫자마다 반복하면서 dp 배열을 업데이트한다. 이때, 현재 숫자보다 큰 숫자들에 대해 dp 값을 갱신하는데, 각 숫자는 이전 숫자들의 합으로 표현된다. 마지막으로 dp[n] 값을 출력한다.