[ etc ] #15 : 요세푸스 문제 - JAVA

문제 설명

N 명의 사람이 원 형태로 서 있습니다. 각 사람은 1부터 N까지 번호표를 갖고 있습니다. 그리고 임의의 숫자 K가 주어졌을 때 다음과 같이 사람을 없앱니다.

  • 1번 번호표를 가진 사람을 기준으로 하고 다시 K 번째 사람을 없앱니다.
  • 없앤 사람 다음 사람을 기준으로 하고 다시 K 번째 사람을 없앱니다.

N과 K가 주어질 때 마지막에 살아있는 사람의 번호를 반환하는 solution()함수를 구현하세요.

 

제약 조건

  • N과 K는 1이상 1000이하의 자연수 입니다.

 

입출력 예

N K return
5 2 3

 

문제 풀이

import java.util.LinkedList;
import java.util.Queue;
public class Java15 {
    public static void main(String[] args) {
        solution(5,2);
    }
    public static void solution(int N, int K) {
        Queue<Integer>queue = new LinkedList<Integer>();
        for(int i=1;i<=N;i++) {
            queue.add(i);
        }
        while(queue.size()!=1) {
            for(int j=0;j<K-1;j++) {
                queue.add(queue.poll());
            }
            queue.poll();
        }
        System.out.println(queue.poll());
    }
}