BOJ

[백준 2720번/JAVA] 세탁소 사장 동혁

syj0522 2024. 3. 17. 17:16

문제

https://www.acmicpc.net/problem/2720

 

2720번: 세탁소 사장 동혁

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

www.acmicpc.net

풀이 1) 

쿼터를 Q, 다임을 D, 니켈을 N, 페니를 P라고 하자

 

1.24를 0.25, 0.10, 0.05, 0.01 각각 최소한 몇 개로 구성할 수 있을까?
= 124를 25, 10, 5, 1 각각 최소한 몇 개로 구성할 수 있을까?

  • 124에 25가 최대 몇 개 들어갈 수 있는지 구한다.
    • Q = 124/25 = 4
  • 124 - (25 * 4)에 10이 최대 몇 개 들어갈 수 있는지 구한다.
    • C = 124 - (25 * 4) = 24
    • D = 24/10 = 2
      ...

같은 방법으로 N, P를 구하면 된다.

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        //테스트 케이스 개수 T 입력받기
        //T만큼 반복하며 각 동전이 몇 개 필요한지 계산
        //출력
        int T = Integer.parseInt(br.readLine());
        int Q, D, N, P;

        for(int i=0; i<T; i++) {
            int C = Integer.parseInt(br.readLine());
            Q = C/25;
            C = (C - (Q * 25));
            D = C/10;
            C = (C - (D * 10));
            N = C/5;
            C = (C - (N * 5));
            P = C/1;
            bw.write(Q + " " + D + " " + N + " " + P);
            bw.write("\n");
        }
        bw.close();
    }
}

풀이 2) StringBuilder 사용

풀이 1보다 개선된 점 : 

  • StringBuilder의 append() 사용
  • 나머지 연산자 활용

풀이 1에서는 C를 새로 구할 때마다 매번 연산식을 124 - (25 * 4) 이렇게 직접 세웠는데, 

나머지 연산자를 사용하면 C를 바로 구할 수 있다.

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        //테스트 케이스 개수 T 입력받기
        //T만큼 반복하며 각 동전이 몇 개 필요한지 계산
        //출력
        int T = Integer.parseInt(br.readLine());
        
        int Q = 25;
        int D = 10;
        int N = 5;
        int P = 1;
        
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<T; i++) {
        	int C = Integer.parseInt(br.readLine());
        	sb.append(C/Q + " ");
        	C%=Q;
        	sb.append(C/D + " ");
        	C%=D;
        	sb.append(C/N + " ");
        	C%=N;
        	sb.append(C/P + "\n");
        }
        bw.write(sb + " ");
        bw.close();
    }
}

풀이 2 (위쪽) 성능이 더 좋아졌다.