다운로드

정희는 한 음악 포털 사이트에서 일정 금액을 충전하여 mp3파일을 다운로드 받아서 사용해 왔다. 지금 이 사이트에서 k곡을 다운받으면 한 곡을 무료로 다운받을 수 있는 이벤트를 진행 중이고, 현재 정희가 다운받을 수 있는 mp3파일의 개수는 n개이다. 이벤트 기간 중 정희가 다운받을 수 있는 총 mp3파일의 개수는 몇 개인가?

Input
첫 줄에는 테스트 케이스의 개수 T ( 0 < T <= 100000 ) 가 주어진다. 한 줄당 하나의 입력이 입력되며, 각 입력 케이스는 n과 k 두 개의 정수로 이루어져 있고, 하나의 스페이스로 구분된다. ( 0 < n < 1000000, 1 < k <= 21)

Output
각 테스트 케이스의 결과 첫 줄은 “Case #X:”와 같이 “Case”뒤에 한 칸 띄우고 ”#”과 테스트 케이스 번호 X 를 출력한 후 “:” 을 찍고, 그 다음 줄은 각 케이스마다 정희가 다운받을 수 있는 총 mp3파일의 개수를 출력한다.

Sample Input
3 4 3 10 3 100 5

Sample Output
Case #1: 5 Case #2: 14 Case #3: 124

Source Code code format="java5" import java.util.Scanner;

public class Download { public static void main(String[] args) { Scanner scan = new Scanner(System.in);

int T = scan.nextInt;   // 테스트 케이스의 개수

for(int i = 0; i < T; i++) { int n = scan.nextInt;   // 다운받을 수 있는 mp3 파일의 개수 int k = scan.nextInt;   // 한 곡을 무료로 다운 받을 수 있는 곡의 개수

System.out.println("Case #" + i + ":"); process(n, k); }   }

public static void process(int n, int k) { System.out.println(getTotalCount(n, k)); }

public static int getTotalCount(int n, int k) { if(n < k) { return n;       }

int q = n / k;       int r = n % k;

return (n - r) + getTotalCount(q + r, k); } } code

Comment 재귀