코딩 테스트

[코딩테스트] 백준 2720번: 세탁소 사장 동혁

dev.jelee 2025. 6. 30. 01:13

# 문제

 

# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ2720_v2 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int T = Integer.parseInt(br.readLine());

    /*
     * 쿼터(Quarter, $0.25)의 개수, 
     * 다임(Dime, $0.10)의 개수, 
     * 니켈(Nickel, $0.05)의 개수, 
     * 페니(Penny, $0.01)의 개수
     */

     int quarter = 25;
     int dime = 10;
     int nickel = 5;
     int penny = 1;

     // 테스트케이스 만큼 반복
     for (int i = 0; i < T; i++) {
      int C = Integer.parseInt(br.readLine()); // 거스름돈
      
      // input을 쿼터, 다임, 니켈, 페니 순으로 나누기
      int q = C / quarter;
      C %= quarter;

      int d = C / dime;
      C %= dime;
      
      int n = C / nickel;
      C %= nickel;

      int p = C / penny;
      C %= penny;
      
      System.out.println(q + " " + d + " " + n + " " + p);
    }
    br.close();
  }
}

 

# 입/출력 결과

 

# 과정

* 시간 초과해서 while문, if문 사용 안하고 계산

  1. 입력은 BufferedReader 사용
  2. int T에 테스트케이스 입력값 받기.
  3. quarter, dime, nickel, penny 정수로 저장.
  4. for문 사용하여 T 만큼 반복.
  5. int C에 거스름돈 입력 받기.
  6. C를 quarter, dime, nickel, penny 순으로 나눈 값들을 순차적으로 q, d, n, p에 각각 저장.
  7. q, d, n, p 사이에 공백을 두고 출력.
  8. BufferedReaer .close() 하기

 

# 메모

  • 처음에 계산을 for문 안에 while문과 if문을 사용해서 코드를 작성했더니 시간 초과가 되어 실패했다.
  • 어차피 0까지 계산해야한다면 while문과 if문은 없어도 되겠다 싶어서 생략하고 q, d, n, p에 각각 C를 quarter, dime, nickel, penny 이런 순으로 나누도록 했다.
  • 불필요한 코드를 줄이는 건 생각을 많이 하게 만드는 것 같다. 그리고 어디가 불필요한 코드인지를 찾는 것이 어려운 거 같다.