문제
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include<iostream>
int main() {
int money{};
std::cin >> money;
int change[6] = { 500,100,50,10,5,1 };
int result{};
//구매금액에서 빼기
money = 1000 - money;
for (int i = 0; i < 6; ++i) {
//몫이 0이라면 나눌 수 없는 수
if (money / change[i] == 0)
continue;
result+=(money / change[i]);
money %= change[i];
}
std::cout << result << "\n";
}
|
후기
이 문제를 해결하기 위한 키워드는 그리디(Greedy)이다.
그리디 탐욕 알고리즘은 최적화 문제를 해결하는 데 사용할 수 있는 가장 간단하며 쉽게 구현할 수 있는 알고리즘이다.
거스름돈 거슬러주기 와 최소비용 신장트리 가 대표적인 탐욕 알고리즘을 적용할 수 있는 문제이다.
해당 금액을 전부 배열에 넣은 후 반복문을 돌면서 값을 나누게 했으며 몫이 0이라면 나눌 수 없는 수 이기 때문에 넘어가고 그 외에는 그 몫만큼 더한 다음 출력하게 하였다.
출처 및 레퍼런스
문제 링크: www.acmicpc.net/problem/5585
'온라인 코딩 > 그리디(Greedy)' 카테고리의 다른 글
[백준] 11047번 동전 0 (0) | 2021.02.11 |
---|---|
[프로그래머스] 큰 수 만들기 (0) | 2020.09.28 |