-
[백준 5585] - [그리디알고리즘] - 거스름돈 (JAVA)알고리즘/그리디알고리즘(Greedy Algorithm) 2018. 12. 27. 14:46
문제 링크 : https://www.acmicpc.net/problem/5585
이문제는 어렵지 않은 그리디 알고리즘 문제이다.
그리디 알고리즘 이란 탐욕적 알고리즘으로 모든 경우의 수를 다 구하면 된다.
거스름돈을 구하는 경우는 아주 쉬운 예제 인데 접근 법은 남은 잔액에서 금액이 큰 동전부터 지급 가능한 개수를 구해나가면 된다.
예제로 380원이 물건 값이 나왔고 1000엔을 받았을때 620원을 거스름돈으로 지불해야 한다.
지불 할 수 있는 동전은 500, 100, 50, 10, 5, 1 엔 총 6가지의 동전이 존재한다.
최소의 개수로 거스름돈을 지불 하고자 한다면 금액이 큰 동전 위주로 지불해주면 되기 때문에 금액이 큰 500엔 부터 줄 수 있는 경우의 수를 구한다.
1) 500엔 으로 지불 가능한 개수
현재 잔돈 620 원에 500엔 하나를 지불할 수 있다.
지불 동전 개수 : 500엔 1개
남은 잔돈 : 120엔
2) 100엔 으로 지불 가능한 개수
현재 잔돈 120엔에 100엔 하나를 지불 할 수 있다.
지불 동전 개수 : 500엔 1개, 100엔 1개
남은 잔돈 : 20엔
3) 50엔 으로 지불 가능한 개수
현재 잔돈 20엔에 50엔으로는 지불 할수 없다.
지불 동전 개수 : 500엔 1개, 100엔 1개
남은 잔돈 : 20엔
4) 10엔 으로 지불 가능한 개수
현재 잔돈 20엔에 10엔으로 2개 지불할 수 있다.
지불 동전 개수 : 500엔 1개, 100엔 1개, 10엔 2개
남은 잔돈 : 0엔
5) 5엔 으로 지불 가능한 개수
현재 잔돈은 0엔이다
지불 동전 개수 : 500엔 1개, 100엔 1개, 10엔 2개
남은 잔돈 : 0엔
6) 1엔 으로 지불 가능한 개수
현재 잔돈은 0엔이다
지불 동전 개수 : 500엔 1개, 100엔 1개, 10엔 2개
남은 잔돈 : 0엔
위의 경우의 수 전부를 소스로 작성하면 된다.
소스
123456789101112131415161718192021222324import java.util.Scanner;public class Main {public static int price;public static int count;public static int[] coinArr = {500, 100, 50, 10, 5, 1};public static void main(String[] args) {Scanner sc = new Scanner(System.in);price = 1000 - sc.nextInt();for(int coin:coinArr) {getCount(coin);}System.out.println(count);}public static void getCount(int coin) {count += (price / coin);price = price - (coin * (price / coin));}}cs '알고리즘 > 그리디알고리즘(Greedy Algorithm)' 카테고리의 다른 글
[백준 10610] - [그리디알고리즘] - 30 (JAVA) (0) 2018.12.27 [백준-4307]-[그리디알고리즘]-개미 (0) 2018.11.15 [백준-2217]-[그리디알고리즘]-로프 (0) 2018.11.15 [백준-11399]-[그리디알고리즘]-ATM (0) 2018.11.15 [백준-1931]-[그리디알고리즘]-회의실배정 (0) 2018.11.15 댓글