java

[java] 2720번 세탁소 사장 동혁

게르마늄팔찌전도사 2024. 3. 26. 09:15

문제

미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.

동혁이는 리암에게 실망했다.

리암은 거스름돈을 주는 것을 자꾸 실수한다.

심지어 $0.5달러를 줘야하는 경우에 거스름돈으로 $5달러를 주는것이다!

어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.

거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어, $1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 거스름돈 C를 나타내는 정수 하나로 이루어져 있다. C의 단위는 센트이다. (1달러 = 100센트) (1<=C<=500)

출력

각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다.

 

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
import java.io.*;
 
public class backjoon_2720 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int quarter = 0//0.25 = 25
        int dime = 0//0.10 = 10
        int nickel = 0//0.05 = 5
        int penny = 0//0.01 = 1
        int money = 0;;
        for(int i = 0; i<n; i++) {
            money = Integer.parseInt(br.readLine());
            quarter = money/25;
            money = money%25;
            dime = money/10;
            money = money%10;
            nickel = money/5;
            money = money%5;
            penny = money/1;
 
            System.out.printf("%d %d %d %d\n", quarter, dime, nickel, penny);
        }
 
    }
}
 
cs

 

간단한 문제다. 그냥 나눗셈과 나머지를 구할 줄 알면 되는 문제다. 처음에 실수를 했었는데, 

 

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
36
37
38
39
40
41
42
43
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] quarter = new int[4]; //0.25 = 25
        int[] dime = new int[4]; //0.10 = 10
        int[] nickel = new int[4]; //0.05 = 5
        int[] penny = new int[4]; //0.01 = 1
        int money = 0;;
        for(int i = 0; i<n; i++) {
            money = Integer.parseInt(br.readLine());
            while(money != 0) {
                if(money >= 25) {
                    quarter[i] = quarter[i] +1;
                    money = money - 25;
 
                }
                else if(money >= 10) {
                    dime[i] = dime[i] + 1;
                    money = money - 10;
                }
                else if(money >= 5) {
                    nickel[i] = nickel[i] +1;
                    money = money - 5;
                }
                else if(money >=1) {
                    penny[i] = penny[i] +1;
                    money = money - 1;
                }
 
            }
 
        }
 
 
        for(int i = 0; i<n; i++) {
            System.out.printf("%d %d %d %d\n", quarter[i], dime[i], nickel[i], penny[i]);
        }
    }
}
 
cs

 

이렇게 런타임을 생각하지 못하고, 배열과 while 문을 이용하여 시간이 오래 걸리게 짜버렸다. 비효율적으로 짜서 런타임 에러가 났다. 자꾸 무의식적으로 배열을 많이 쓰는데 배열이 많으면 메모리가 낭비된다는 점을 고려하여 무차별적으로 배열을 쓰는 습관을 점점 개선해야할 것 같다.

 

'java' 카테고리의 다른 글

[java] 2745 진법  (0) 2024.03.28
[java] 11005 진법 변환2  (0) 2024.03.27
[java] 2903번 중앙 이동 알고리즘  (0) 2024.03.25
[java] 2738번 행렬 덧셈  (0) 2024.03.21
[java] 2563 색종이  (0) 2024.03.19