문제
문제이해
치킨을 한마리 주문할 수 있는 쿠폰이 n장이 있고, 치킨을 먹을때마다 도장을 찍어준다. 도장을 k개 모으면 다시 치킨 쿠폰 한 장을 얻을 수 있을 때 쿠폰을 이용하여 최대 몇 마리의 치킨을 먹을 수 있는지 구하는 문제이다
입력
여러 줄에 걸쳐서 자연수 n 과 k가 주어진다.
- n k
출력
각 입력마다 한 줄에 정답을 출력한다.
풀이
n개의 쿠폰에서 n개의 도장을 얻게되고 n/k 개의 쿠폰을 얻게 됩니다.
기존에 남은 도장 n%k개와 새로 얻게된 쿠폰을 통해 얻게되는 도장 n/k를 더하게 되면 추가로 얻을 수 있는 도장을 구할 수 있습니다.
새롭게 얻은 도장을 또 k개로 나누며 더 이상 얻을 수 있는 쿠폰이 없을 때까지 반복합니다.
여기에서 주의할 점은 입력입니다. 기존의 방식대로 수를 입력받게되면 실패하게 되는데 이유는 입력이 한 줄 한 줄 순서대로 입력되는게 아니라 한번에 여러 줄이 입력이 들어오기 때문입니다. 따라서 EOF문제를 처리해 주면 되겠습니다.
코드
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// EOF처리
while(sc.hasNextInt()){
int n = sc.nextInt();
int k = sc.nextInt();
int temp = n, add_coupon = 0;
while(temp >= k){
add_coupon += temp / k;
// 새롭게 얻게되는 쿠폰에서 생기는 도장 + 기존에 남은 도장
temp = temp/k + temp%k;
}
System.out.println(n+add_coupon);
}
}
}
'Algorithm > 문제' 카테고리의 다른 글
[알고리즘] 백준 1021 : 회전하는 큐 - JAVA (0) | 2023.04.17 |
---|---|
[알고리즘] 백준 1004 : 어린 왕자 - JAVA (0) | 2023.04.13 |
[알고리즘] 백준 1003 : 피보나치 함수 - JAVA (0) | 2023.04.11 |
[알고리즘] 백준 2606 : 바이러스 - JAVA (0) | 2023.04.10 |
[알고리즘] 백준 1541 : 잃어버린 괄호 - JAVA (0) | 2023.04.10 |