#5585 거스름돈
문제 정리
언제나 거스름돈 개수가 가장 적게 잔돈을 준다고 했으니, 액수가 큰 동전부터 주면 된다 (다 약수관계 이므로 최적해)
1000원에서 지불할 돈을 뺀 후에, 남은 돈을 동전 중에 가장 큰 단위부터 차례대로 빼주면 끝!
생각해보기
만약에 내는 돈이 1000원이 아니라 2000이여서 거스름돈이 1573원이라고 치자…
그러면 맨 처음에 500으로 나눠서 몫을 구하고, 몫이 1이상이면
500 * 몫을 거스름돈에서 빼주고 남은 거스름돈에 대해서도 마찬가지로 100, 50, … 이렇게 해주면 된다.
물론 몫들은 최종 답 변수에 더해주고!
아 걍 나머지 연산자 쓰면 되잖아?
코드 쓰기
몫 연산자 : /
나머지 연산자 : %
if (change / 500 >= 1) {
answer += change / 500;
change = change % 500;
}
요 코드를 숫자만 바꿔서 반복해주면 되니까, 반복문을 써서 한 번에 해결하자 ~!! LOC 줄이기 대작전..~
내 풀이
// BOJ-5585 거스름돈
#include <iostream>
using namespace std;
int main() {
int price, change, answer = 0;
cin >> price;
change = 1000 - price;
// 동전 종류 : 500, 100, 50, 10, 5, 1
int coins[6] = {500, 100, 50, 10, 5, 1};
for (int i=0; i < 6; i++){
if (change / coins[i] >= 1) {
answer += change / coins[i];
change %= coins[i];
}
}
cout << answer;
}
풀고 나서 알게된 것
순간 c++에서 배열 어떻게 선언하는지 까먹음 ㅋㅋㅋㅋ 정신이 나갔구나…
그리고 coins.count
coins.size
다 안돼서 뭔가 했더니 sizeof()
를 써야 하는 거였다…