728x90
반응형

Java 문제풀이

import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n= scan.nextInt();
		int k = scan.nextInt();
		Queue<Integer> q = new LinkedList<>(); 
		
		for(int i=0;i<n;i++) {
			q.add(i+1);
		}
		
		System.out.print("<");
		while (q.size()>0){
        	// 맨 앞에있던 숫자를 poll한 후 큐에 새로 추가하여 큐의 시작을 변경
			for(int i=0;i<k-1;i++) {
				q.add(q.poll());
			}
			System.out.print(q.poll());
			if (q.size()>0) {
				System.out.print(", ");
			}
		}
		System.out.print(">");
	}

}

요세푸스 문제를 더욱 효율적으로 풀어봤습니다.

파이썬으로 풀었을때는 어떻게 풀었는지 기억이 안나는데 이 방법이 가장 효율적인 것 같습니다.

 

큐를 선언하여 지정된 수 만큼의 숫자를 순차적으로 큐에 추가합니다.

k번째에 세어지는 숫자가 순차적으로 제거되기 떄문에 k-1번의 횟수만큼 큐의 맨 앞에 있는 숫자를 지웠다가 새로 추가하여 뒤로 보내는 작업을 합니다. 그러면 맨 앞에 있는 숫자가 k번째 숫자가 되기 때문에 그 숫자를 poll해줍니다.

 

출력은 <?, ?, ?, ?>형태로 하도록 되어있기 때문에 지저분해졌지만 문제는 풀었습니다..ㅎㅎ

 

728x90
반응형

+ Recent posts