✔ 난이도 - Silver 4

https://velog.io/@seha01130/백준JAVA-1158번-요세푸스-문제
위의 문제를 풀 수 있다면 바로 풀 수 있다
나는 처음에 아래처럼 코드를 짰음.
카드가 한 장 남을때까지 반복하는데, 무엇을 반복하냐면 버리고 뒤로보내고를 반복함. 그 반복을 위해 for문을 한 번 더 사용했다while (list.size() > 1){ for (int i = 0; i < 2; i++){ if (i == 0){ list.remove(); } else { list.add(list.remove()); } } }그러나 아래처럼 하나의 while문으로 끝낼 수 있었다.
한 장 버리면 그 다음 카드가 맨 앞 카드가 되기때문에 그걸 맨 뒤로 보낸다. 이걸 카드가 한 장 남을때까지 반복하면 된다.while (list.size() > 1){ list.removeFirst(); list.addLast(list.removeFirst()); }
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i <= N; i++){
list.add(i);
}
while (list.size() > 1){
for (int i = 0; i < 2; i++){
if (i == 0){
list.remove();
} else {
list.add(list.remove());
}
}
}
sb.append(list.get(0));
System.out.println(sb);
}
}
📌 https://velog.io/@seha01130/LinkedList-메소드-정리

