GitHubSeob

C++ / 백준 / 14916 / 거스름돈 본문

Baekjoon/Silver

C++ / 백준 / 14916 / 거스름돈

GitHubSeob 2023. 7. 4.
문제

 

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

 

14916번: 거스름돈

첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.

www.acmicpc.net

문제풀이

 

이 문제는 수학적으로도 풀 수 있지만 DP로도 풀 수 있어서 DP로 풀었다.

1부터 N까지 거스름돈 동전 개수를 나타내기 위한 won 벡터와,  2원, 5원 동전이 들어있는 coin벡터를 선언했다.

 

거슬러 줄 수 없으면 -1을 출력해야 되기 때문에 벡터를 -1로 초기화했다.

DP를 사용할 것이기 때문에 0원의 동전의 개수는 0으로 설정해 준다.

 

2원 동전부터 시작하여 2의 배수가 되면 2원을 뺀 금액의 동전의 개수+1을 한다.

5원 동전도 마찬가지로 5원부터 5원을 뺀 금액의 동전의 개수+1을 한다.

9원 같은 경우는 4원(2원 2개) + 5원(1개)처럼 채워진다.

 

코드
#include <iostream>
#include <vector>
using namespace std;

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

	int idx(0), idx2(0), N(0);
	cin >> N;
	vector<int>won(N + 1, -1);
	vector<int>coin = { 2,5 };

	won[0] = 0;

	for (idx = 0; idx < coin.size(); ++idx) {
		for (idx2 = 1; idx2 <= N; ++idx2) {
			if (idx2 >= coin[idx] && won[idx2 - coin[idx]] != -1) {
				won[idx2] = won[idx2 - coin[idx]] + 1;
			}
		}
	}

	cout << won[N];
}

 

'Baekjoon > Silver' 카테고리의 다른 글

C++ / 백준 / 2217 / 로프  (2) 2023.07.04
C++ / 백준 / 1343 / 폴리오미노  (0) 2023.07.04
C++ / 백준 / 2529 / 부등호  (0) 2023.06.11
C++ / 백준 / 1302 / 베스트셀러  (0) 2022.03.31
C++ / 백준 / 10546 / 배부른 마라토너  (0) 2022.03.31