[BOJ-Code] 14501 - 퇴사

Posted by DHniyeo Blog on August 20, 2024

문제 링크

💡 브루트포스 알고리즘/다이나믹 프로그래밍

Memory 2020KB Time 0ms Code Length 584B

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
#include <iostream>
using namespace std;

int N;
struct info {
	int T, P;
};

info arr[16];
int dp[21]; // 최댓값 갱신

void init() {
	cin >> N;
	for (int i = 1; i <= N; i++) {
		cin >> arr[i].T >> arr[i].P;
	}
}
void solve() {
	int max = 0;
	for (int i = 1; i <= N+1; i++) {
		max = max < dp[i] ? dp[i] : max;
		dp[i + arr[i].T] = max + arr[i].P < dp[i + arr[i].T] ? dp[i + arr[i].T] : max + arr[i].P;
		// 상담완료 날짜의 최대값 갱신 : 현재 날짜의 DP값에서 요금을 더한 값 or 해당 날짜의 dp값
	}

	cout << max;
}
int main() {
	init();
	solve();
}

init() 함수에서는 사용자로부터 N개의 정보를 입력받아 구조체 배열 arr에 저장한다.

solve() 함수에서는 최대값을 구하기 위해 반복문을 실행하면서 각 날짜마다 최대값을 갱신한다.

각 날짜마다 해당 날짜까지의 최대값을 저장하는 dp 배열을 사용하여 상담을 완료한 날짜의 최대값을 갱신한다. 마지막으로 최종적인 최대값을 출력한다.