본문 바로가기

코딩테스트/C++

[백준 C++] 16194번: 카드 구매하기 2

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

 

16194번: 카드 구매하기 2

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

저번에 풀었던 카드 구매하기 문제는 살 수 있는 카드팩중 최대값으로 사는 문제였는데 이 문제는 최소값을 구하는 문제이다.

https://dwshin-dev.tistory.com/43

 

[백준 C++] 11052번: 카드 구매하기

https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,

dwshin-dev.tistory.com

 

풀었던 방식은 같고 비교 한뒤 max로 더 큰 값을 넣어주는 함수를 min으로 바꿔 주었다.

 

#include <iostream>
#include <algorithm>
using namespace std;
int p[10001];
int dp[10001] = { 0 };
 
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n;
	cin >> n;
 
	for (int i = 1;i <= n;i++) {
		cin >> p[i];
	}
 
	for (int i = 1;i <= n;i++) {
		dp[i] = p[i];
	}
 
	for (int i = 2;i <= n;i++) {
		for (int j = 1; j < i; j++) {
			dp[i] = min(dp[i - j] + p[j], dp[i]);
		}
	}
 
	cout << dp[n] << "\n";
 
	return 0;
}

 

사실 이전 문제를 풀때 min으로 잘못 풀었어서 오히려 더 수월하게 이번문제를 푼거같다.