https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
문제
알고리즘
이 문제는 Queue를 사용해서 문제를 해결하면 쉽다!
1. 1~N까지의 정수를 Queue에 add 해준다.
2. K-1번을 poll해서 다시 Queue에 add해준다.
3. 그러면 Queue의 맨 앞의 숫자를 poll 해서 삭제한다.
4. 1~3번을 Queue의 size가 1일 때까지 반복한다.
5. 마지막 Queue의 숫자를 빼서 해결 !
코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Queue<Integer> que = new LinkedList<>();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
for(int i=1; i<=N; i++) {
que.offer(i);
}
int cnt = 1;
bw.write("<");
while(que.size() != 1) {
if(cnt == K) {
bw.write(que.peek() + ", ");
que.poll();
cnt = 1;
}
else {
que.offer(que.poll());
cnt++;
}
}
bw.write(que.poll() + ">");
bw.flush();
br.close();
bw.close();
}
}
'Baekjoon' 카테고리의 다른 글
[백준] 17413번 단어 뒤집기2 (Java) (0) | 2024.03.08 |
---|---|
[백준] 1406번 에디터 (Java) (0) | 2024.03.07 |
[백준] 2164번 카드2 (Java) (1) | 2024.02.28 |
[백준] 1920번 수 찾기 (Java) (1) | 2024.02.27 |
[백준] 9012번 괄호 (Java) (3) | 2024.02.27 |