코딩 테스트/백준

[백준] 2720번: 세탁소 사장 동혁 (브론즈3, JAVA)

Nirsa 2023. 12. 19. 09:47
반응형

 

문제 링크 : 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;
    }
}
반응형