반응형
문제 링크 : https://www.acmicpc.net/problem/2720
[백준] 2720번: 세탁소 사장 동혁 (브론즈3, JAVA)
아래의 코드는 dfs 메소드를 구현하기 전 입니다. 거스름돈을 몇개 받았는지 확인할 쿼터, 다임, 니켈, 페니의 인스턴스 변수를 생성하고, 사용자로부터 테스트 케이스 수(T)와 거스름돈(C)를 입력받고 dfs 메소드를 실행합니다.
public class Main {
int quarter;
int dime;
int nickel;
int penny;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
Main main = new Main();
int[] arrayC = new int[T];
for(int i=0; i<T; i++) {
arrayC[i] = sc.nextInt();
}
for(int c : arrayC) {
main.dfs(c);
}
}
}
dfs 메소드는 아래와 같이 매개변수로 전달받은 C를 수가 큰 값부터(쿼터 → 다임 → 니켈 → 페니) 나눠 줍니다. 몫이 0이 아닐때는 그 다음으로 작은 값으로 넘어갑니다.
조건이 성립할때마다 제귀호출을 하는데 전달받았던 값에서 금액을 제외해가며 큰 값부터 하나씩 개수를 세어갑니다. 마지막으로 계산이 모두 종료된다면 각각의 거스름돈 개수를 출력하고 변수를 0으로 초기화 해줍니다.
void dfs(int C) {
if(C/25 != 0) { // 쿼터(Quarter, $0.25)의 개수
quarter++;
dfs(C-25);
} else if(C/10 != 0) { // 다임(Dime, $0.10)의 개수
dime++;
dfs(C-10);
} else if(C/5 != 0) { // 니켈(Nickel, $0.05)의 개수
nickel++;
dfs(C-5);
} else if(C/1 != 0) { // 페니(Penny, $0.01)의 개수
penny++;
dfs(C-1);
} else { // 계산이 모두 종료되었으면 출력 후 변수 초기화
System.out.printf("%d %d %d %d \n", quarter, dime, nickel, penny);
quarter = 0;
dime = 0;
nickel = 0;
penny = 0;
}
}
반응형
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 1253번: 좋다 (골드4, JAVA) (479) | 2023.12.21 |
---|---|
[백준] 2839, 10162번: 설탕 배달, 전자레인지(실버4, 브론즈3, JAVA) (988) | 2023.12.19 |
[백준] 1026번: 보물 (실버4, JAVA) (373) | 2023.12.18 |
[백준] 1075번: 나누기 (브론즈2, JAVA) (1) | 2023.12.05 |
[백준] 15596번: 정수 N개의 합 (JAVA, 자바) (0) | 2022.03.23 |