강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때 마다 다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환할 수 있다 강민이가 지금 갖고 있는 치킨 쿠폰으로 치킨을 최대 몇마리나 먹을 수 있는지 구하여라. 단 치킨을 주문하기 위해서는 반드시 치킨 쿠폰을 갖고 있어야 한다
입력 : n k
출력 : 정답
EX)
4 3
10 3
100 5
출력
5
14
124
package _38_chicken;
import java.util.Scanner;
public class Main {
public static void doFunc(int coupon, int stamp, int k, int ans) {
if (coupon > 0) { //쿠폰이 1장이라도 있으면
coupon--; //쿠폰-
stamp++; //도장개수 +
ans++; //총 먹은 치킨의 개수+
doFunc(coupon, stamp, k, ans); //재귀함수 타기
return; //return을 안하면 이 조건도 if (coupon == 0 && stamp/k == 0)을 타기 때문에 return
} else if (stamp > 0){ //도장이 1개 이상일 경우
if (stamp/k > 0) { //도장과 k 개수가 최소한 같을 때
stamp -= k; //쿠폰으로 교환가능
coupon++; //쿠폰 교환
doFunc(coupon, stamp, k, ans);
}
}
if (coupon == 0 && stamp/k == 0) {
System.out.println(ans);
}
}
public static void main(String[] args) {
int coupon; //쿠폰
int k; //도장을 k개 모을경우 쿠폰1개
Scanner s = new Scanner(System.in);
coupon = s.nextInt(); //쿠폰
k = s.nextInt(); // 도장을 k개 모을경우 쿠폰1개
doFunc(coupon, 0, k, 0); //재귀 함수
}
}
'JAVA' 카테고리의 다른 글
두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오. (0) | 2021.05.14 |
---|---|
두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오. (0) | 2021.05.14 |
입력된 단지의 수와 각 단지의 세대수를 출력하시오 (0) | 2021.05.13 |
입력된 수를 이진수로 변환하세요 재귀 (0) | 2021.05.12 |
숫자 추출 재귀 (0) | 2021.05.11 |