CS & Algorithm
[CS & Algorithm-9] 거스름돈 (Greedy)
lee-maru
2021. 8. 19. 22:56

BaekJoon Online Judge 5585
Question :https://www.acmicpc.net/problem/5585
Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution6.java
/**
/** @link : https://www.acmicpc.net/problem/5585
*
* @implNote 타로는 자주 JOI잡화점에서 물건을 산다.
* JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다.
* 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.
*
* 입력
* 입력은 한줄로 이루어져있고, 타로가 지불할 돈(1 이상 1000미만의 정수) 1개가 쓰여져있다.
*
* 출력
* 제출할 출력 파일은 1행으로만 되어 있다. 잔돈에 포함된 매수를 출력하시오.
*
*
* @implSpec
* 예제 입력 1
* 380
* 예제 출력 1
* 4
* 예제 입력 2
* 1
* 예제 출력 2
* 15
*/
import java.util.Scanner;
public class Solution6 {
public static void main(String\[\] args) {
int\[\] arr = {500,100,50,10,5,1};
Scanner sc = new Scanner(System.in);
int money = 1000 - sc.nextInt();
int count = 0;
// 알고리즘 복잡도 O(6)
for (int i = 0; i < arr.length; i++) {
if(money == 0){ // 잔돈을 다 거슬러 주면 종료
break;
}else if(money >= arr\[i\]){ // 500엔보다 클경우 100엔 보다 클 경우 등등
count = count + (money/arr\[i\]); // 거스름 갯수
money = money%arr\[i\]; // 잔돈
}
}
System.out.println(count);
}
}