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에 대한 계산이 수행되는 것
이후에 출력.