문제 1:
숫자 추출 재귀
문제 설명:
정수 n이 주어진다.
재귀를 사용해 n의 높은 수부터 출력
코드:
package number_zeg;
public class number {
public static void main(String[] args) {
int n = 2312;
number(n);
}
public static void number(int n) {
if(n/10 == 0) {
System.out.println(n);
return;
}
number(n/10);
System.out.println(n % 10);
}
}
문제 2:
2진수 변환 재귀
문제 설명:
10진수 n이 주어진다.
재귀를 사용해 n을 2진수로 변환 후 출력
코드:
package jinsu_ze;
public class jinsu {
public static void main(String[] args) {
int n = 17;
su(n);
}
public static void su(int n) {
if(n == 0) {
return;
}
su(n / 2);
System.out.print(n % 2);
}
}
문제 3:
치킨 쿠폰
문제 설명:
강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다.
이 치킨집에서는 치킨을 한마리 주문할 때마다 도장을 하나씩 찍어 주는데,
도장을 k개 모으면 치킨 쿠폰 한 장으로 교환할 수 있다.
강민이가 지금 갖고 있는 치킨 쿠폰으로 치킨을 최대 몇 마리나 먹을 수 있는지 구하여라,
단 치킨을 주문하기 위해서는 반드시 치킨 쿠폰을 갖고 있어야 한다.
내가 푼 코드 :
package chicken;
public class chicken {
private static int coupon = 0;
private static int chickenCount = 0;
public static void main(String[] args) {
//치킨 한마리를 교환할 수 있는 쿠폰
int n = 4;
//도장을 k개 모으면 쿠폰 하나
int k = 3;
chicken(n,k);
System.out.println(chickenCount);
}
public static void chicken(int n, int k) {
if(n == 0)
return;
n -= 1;
chickenCount++;
coupon++;
if(coupon == k) {
n += 1;
coupon = 0;
}
chicken(n,k);
}
}
찾아 본 코드 :
package chicken;
public class chicken_02 {
public static void main(String[] args) {
int n = 4;
int k = 3;
int coupon = n;
chicken(coupon,0,k,0);
}
public static void chicken(int coupon, int stamp, int k, int ans) {
if(coupon > 0) {
coupon--;
stamp++;
ans++;
chicken(coupon, stamp, k, ans);
return;
}else if(stamp > 0){
if(stamp/k > 0) {
stamp -= k;
coupon++;
chicken(coupon,stamp,k,ans);
}
}
if(coupon == 0 && stamp/k == 0) {
System.out.println(ans);
}
}
}
'알고리즘 문제' 카테고리의 다른 글
LeetCode (Java) 문제 (0) | 2024.09.30 |
---|---|
백준 알고리즘 문제 (Java) 09.20 (0) | 2024.09.20 |
오늘 알고리즘(09.09) (0) | 2024.09.09 |
오늘 알고리즘 문제(09.06) (0) | 2024.09.06 |
오늘의 알고리즘 문제(09.05) (0) | 2024.09.05 |