백준 - JAVA/큐, 덱
[백준] 11866번 요세푸스 문제 0 _ JAVA ( 주석 설명 )
wch_s
2023. 3. 20. 20:46
풀이
1) N만큼의 숫자를 queue 에 넣는다.
2) queue 에서
K번째 수는 queue.poll() 을 하고 해당 수를 StringBuilder 에 저장을 해준다.
일반적인 수는 queue.poll() 을 하고 그 수를 다시 queue.add() 를 해준다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
sb.append("<");
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
Queue<Integer> queue = new LinkedList<>();
for(int i=1;i<=N;++i){
queue.add(i);
}
int count = 1;
while(!queue.isEmpty()){
int num = queue.poll();
if(count%K!=0){ //요세푸스 순열의 K번째 수가 아니면 queue에 넣는다.
queue.add(num);
}
else{
sb.append(num).append(", ");
}
count++; //-번째인지 count 한다.
}
sb.setLength(sb.length()-2); //StringBuilder ", " 삭제
sb.append(">");
System.out.println(sb);
}
}