개발/Java

[Java] 케이크 먹기

suniverse 2023. 3. 23. 12:07
케이크를 n조각으로 자른 후 규칙에 따라 케이크를 먹기로 합니다. 
1. 케이크는 편의를 위해서 1번 조각을 기준으로 시계방향으로 n번 조각까지 순서대로 있다고 한다. 
2. 항상 1번 조각 케이크 부터 먹는다. 
3. 다음 조각은 이전에 먹은 케이크 조각에서 시계 방향으로 남아있는 조각들 중 k번째에 있는 조각을 먹는다.
4. 케이크가 2조각 남으면, 먹는 것을 멈춘다. 

케이크를 자른 조각의 개수 n과 k가 주어졌을 때, 마지막에 남은 케이크 조각의 번호를 출력하시오. 

n = 8, k = 2 : 4 8
n = 6, k = 3 : 3 5

입력형식> 8 2 
출력형식> 4 8 

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Test3 {

	public static void main(String[] args) throws Exception {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		String[] input = reader.readLine().split(" ");
		int n = Integer.parseInt(input[0]);
		int k = Integer.parseInt(input[1]);
		
		List<Integer> cake = new ArrayList<Integer>();
		for(int i=0; i<n; i++) {
			cake.add(i+1);
		}
		
		int index = 0;
		while(cake.size() > 2) {
			int removeNum = cake.remove(index);			
			index += (k-1);			
			if(index >= cake.size()) {
				index = index - cake.size();
			}
		}
		
		System.out.println(cake);
		
	}

}