※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 17212번 문제인 달나라 토끼를 위한 구매대금 지불 도우미이다.
문제는 아래 링크를 확인하자.

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

 

17212번: 달나라 토끼를 위한 구매대금 지불 도우미

달나라 토끼들이 사용하는 화폐는 동전뿐이다. 동전의 종류는 1원, 2원, 5원, 7원 이렇게 4종류가 있다. 물건을 사고 동전으로 계산을 하는데 동전의 개수가 최소가 되도록 지불하지 않는 것은 

www.acmicpc.net

 

각 금액 N>0을 지불하는 방법은 (1)1원 동전을 포함하거나 (2)2원 동전을 포함하거나 (3)5원 동전을 포함하거나 (4)7원 동전을 포함하는 네 경우 중 적어도 하나를 만족함을 관찰하자.

따라서 각 금액 N>0을 최소 개수의 동전으로 지불하는 방법은 (1)N1원을 최소 개수의 동전으로 지불한 뒤 1원 동전을 추가로 지불하거나 (2)N2원을 최소 개수의 동전으로 지불한 뒤 2원 동전을 추가로 지불하거나 (3)N5원을 최소 개수의 동전으로 지불한 뒤 5원 동전을 추가로 지불하거나 (4)N7원을 최소 개수의 동전으로 지불한 뒤 7원 동전을 추가로 지불하는 네 경우 중 적어도 하나를 만족함을 알 수 있다.

위 관계를 점화식으로 나타내 문제를 해결하자.

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N;
int dp[100001];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	for (int i = 1; i < 100001; i++) {
		dp[i] = dp[i - 1];
		if (i > 1) dp[i] = min(dp[i], dp[i - 2]);
		if (i > 4) dp[i] = min(dp[i], dp[i - 5]);
		if (i > 6) dp[i] = min(dp[i], dp[i - 7]);
		dp[i]++;
	}

	cin >> N;
	cout << dp[N];
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 10330 // C++] 비트 문자열 재배열하기  (0) 2024.04.18
[BOJ 17213 // C++] 과일 서리  (0) 2024.04.17
[BOJ 6148 // C++] Bookshelf 2  (0) 2024.04.15
[BOJ 13116 // C++] 30번  (0) 2024.04.14
[BOJ 6511 // C++] Black and white painting  (0) 2024.04.13

+ Recent posts