본문 바로가기
프로그래밍/백준 알고리즘 코드

[백준] 2720번 JAVA 세탁소 사장 동혁 - 일반 수학 1

by 졸린이 2024. 8. 1.
반응형

자 문제가 길다. 차분히 읽기 너무 싫다.

그러니까 동혁 중대장이 세탁소를 운영하다 리암을 채용하고 실망했다.

왜냐면 거스름돈을 자꾸 실수해서 주기 때문. 중대장은 리암을 도와주는 프로그램을 작성하려고 하는데 디아블로를 해야해서 이 문제를 읽고 있는 여러분이 대신 해주어야 이런 시발 이런 쓰잘대기 없는 내용이 문제에 왜 있어!!

 

자 T와 C 두 정수를 입력받는다. T는 테스트 케이스의 개수이며 C는 거스름돈이다. 동전의 개수를 최소하 하여야 한다.

거스름돈 동전의 단위는 25센트(쿼터), 10센트(다임), 5센트(니켈), 1센트(페니) 이 순서대로 공백을 넣어 각 동전의 개수를 출력하면 된다.


이거 그리디 알고리즘 같긴 한데 뇌에 남은 메모리가 없다. 그냥 동전, 욕심쟁이, 거스름돈, 그리디 이 단어들이 조합되었던 옛날이 떠오를 뿐. 아무튼 그건 치우고 풀어보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int t = sc.nextInt(); //test case
        int c[] = new int[t]; //case만큼 거스름돈 배열 선언
        
        for(int i=0; i<t; i++) {
            c[i] = sc.nextInt(); //거슬름돈 입력
        }
        
        int[] coin = {251051}; //쿼터, 다임, 니켈, 페니
 
        for(int i=0; i<t; i++) {
            int res[] = new int[4]; //결과 출력 (0으로 초기화)
            
            for(int j=0; j<coin.length; j++) {
                
                while(c[i] >= coin[j]) {
                    c[i] -= coin[j];    
                    res[j]++;
                } 
            }
            
            for(int j=0; j<res.length; j++) {
                System.out.print(res[j]);
                System.out.print(" ");
            }
            System.out.println();
        }
        
    }
}
cs

그렇게 어렵지 않다. 그냥 단순하게 예를들면 우리나라 753원을 가장 적은 동전 갯수로 나누려면 어떻게 해야할까?

바로 500원 하나 100원 두개 50원 하나 1원 세 개 일 것이다. 물론 1원은 사용하지 않지만 그런건 고려하지 않는다.

 

거스름돈을 가장 큰 동전부터 뺄 수 있을만큼 다 빼고 그 다음 큰 동전으로 가고 가고 분배해주면 끝나는 문제다.

이제 반복하는 것들이 있으니 for문 while문 대충 덕지 덕지 발라주면 된다.

14행 : 동전 단위를 int 배열로 입력했다.

 

16행 : 테스트 케이스만큼 큰 for문을 돈다.

 

19행 : 동전 단위만큼 반복해서 21행에서 거스름돈이 동전 단위보다 크면 c[i] -= coin[j] 해서 동전 단위만큼 거스름돈에서 빼주고 res[j]++ 그 동전 단위 위치에 있는 res[] 결과값 배열에 카운트 해준다.

 

손코딩을 해보자면 아래 처럼 124 는 4 2 0 4 가나온다. 

이해가 잘 안갈땐 손코딩을 해보고 규칙을 찾아서 코딩을 하면 편하다.

반응형

댓글