세탁소 사장

곽지욱·2023년 9월 6일

BOJ

목록 보기
19/69
post-thumbnail

백준 2720: 세탁소 사장 동혁 B3

2720번: 세탁소 사장 동혁

import java.util.Scanner;

public class Coin_Laundry {
    public static void main(String[] args) {

        //테스트 케이스 개수 T
        //가장 큰 금액부터 빼주면서 최소 동전의 개수를 구하는 문제
        //입력단위는 센트 단위 최대 500 ->
        //Q : 25센트, D : 10센트, N : 5센트, P: 1센트

        int Q =0;
        int D =0;
        int N =0;
        int P =0;

        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt();

        for(int i=0; i<T; i++){

            int Case = sc.nextInt();

            while (Case > 0){ //Case가 0이 될 때 까지 반복

                if(Case >= 25){
                    Case -= 25;
                    Q++;

                } else if (Case < 25 && Case >= 10) {
                    Case -=10;
                    D++;

                } else if (Case < 10 && Case >=5) {
                    Case -=5;
                    N++;
                } else if (Case < 5 && Case >=1) {
                    Case -=1;
                    P++;
                }

            }
            System.out.println(Q+" "+D+" "+N+" "+P);
            Q = 0; D=0; N= 0; P= 0;

        }

    }
}
  • 그리디 알고리즘 개념을 이용한 최소 동전 개수를 구하는 문제이다

  • 어렵지 않게 느껴져서 처음에 코드를 작성했는데 while문을 빠져나간 뒤에 동전 개수를 초기화 시켜 주지 않는 실수를 범했었다

  • 코드의 길이를 줄이고 싶어서 다른 사람들의 코드를 살펴봄..

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();  // 테스트 케이스 개수
        int quarter = 25;          // 쿼터 0.25$
        int dime = 10;             // 다임 0.10$
        int nickel = 5;            // 니켈 0.05$
        int penny = 1;             // 페니 0.01$

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < t; i++) {
            int c = scanner.nextInt();

            int qCount = c / quarter;
            c %= quarter;

            int dCount = c / dime;
            c %= dime;

            int nCount = c / nickel;
            c %= nickel;

            int pCount = c / penny;

            sb.append(qCount).append(" ");
            sb.append(dCount).append(" ");
            sb.append(nCount).append(" ");
            sb.append(pCount).append("\n");
        }

        System.out.print(sb);
        scanner.close();
    }
}
  • StringBuilder 는 문자열을 효율적으로 다루기 위한 자바 클래스 이다, 가변적인 문자열을 생성하고 수정하는 데 사용됨

  • T 값을 스캐너로 입력을 받고, for문이 T만큼 반복하는 동안 c (거스름돈) 을 입력받는다

  • qCount 에는 c 에서 quarter 값을 나눈 몫을 입력하고 c 의 값을 c 에서 quarter로 나눈 나머지 값으로 업데이트

  • 따라서 124를 25로 나눈 나머지 값인 24가 c에 저장 됨 이후에 다음 동전인 Dime에 대한 계산이 수행되는 것

  • 이후에 출력.

0개의 댓글