[백준] 20301 반전 요세푸스 - Java
Iterator를 사용하면 쉽게 풀 수 있다.
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));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
LinkedList<Integer> list = new LinkedList<>();
for(int i=1; i<=N; i++){
list.addLast(i);
}
ListIterator<Integer> it = list.listIterator();
int cnt = 0;
while(list.size() != 0){
if(cnt >= M){
for(int i=0; i<K; i++){
if(!it.hasPrevious()){
it = list.listIterator();
for(int j=0; j<list.size(); j++){
it.next();
}
}
if(i == K-1){
System.out.println(it.previous());
it.remove();
cnt++;
if(cnt == M*2){
cnt = 0;
}
}else{
it.previous();
}
}
}else{
for(int i=0; i<K; i++){
if(!it.hasNext()){
it = list.listIterator();
}
if(i == K-1){
System.out.println(it.next());
it.remove();
cnt++;
}else{
it.next();
}
}
}
} // end of while
}
}
주의할 점
1. 거꾸로 읽어야 할 때는 이터레이터를 초기화 할 때 마지막 요소를 가리키고 있어야 한다.
2. listiterator를 사용해 previous메서드를 사용하자.
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 9375 패션왕 신혜빈 - Java (0) | 2022.04.21 |
---|---|
[백준] 9663 N-Queen - Java (0) | 2022.04.18 |
[백준] 3078 좋은 친구 - Java (0) | 2022.04.17 |
[백준] 17262 팬덤이 넘쳐흘러 - Java (0) | 2022.04.06 |
[백준] 14888 연산자 끼워넣기 - Java (0) | 2022.03.06 |
댓글
이 글 공유하기
다른 글
-
[백준] 9375 패션왕 신혜빈 - Java
[백준] 9375 패션왕 신혜빈 - Java
2022.04.21 -
[백준] 9663 N-Queen - Java
[백준] 9663 N-Queen - Java
2022.04.18 -
[백준] 3078 좋은 친구 - Java
[백준] 3078 좋은 친구 - Java
2022.04.17 -
[백준] 17262 팬덤이 넘쳐흘러 - Java
[백준] 17262 팬덤이 넘쳐흘러 - Java
2022.04.06