문제
https://www.acmicpc.net/problem/2720
풀이 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 (위쪽) 성능이 더 좋아졌다.
'BOJ' 카테고리의 다른 글
[백준 1193번/JAVA] 분수찾기 (0) | 2024.03.17 |
---|---|
[백준 2903/JAVA] 중앙 이동 알고리즘 (0) | 2024.03.17 |
[백준 2745번/JAVA] 진법 변환 (0) | 2024.03.14 |
[백준 2563번/JAVA] 색종이 | 이차원 배열 (0) | 2024.03.14 |
[백준 2566번/JAVA] 최댓값 | 이차원 배열 (3) | 2024.03.14 |