
카드가 1부터 N까지 차례대로 쌓여있다.
1. 가장 위에 있는 카드를 버린다.
2. 그다음으로 가장 위에 있는 카드를 맨 밑으로 옮긴다.
3. 반복한다.
=> 가장 마지막에 남는 카드는?
큐의 FIFO(선입선출) 성질을 이용해 풀 수 있다.
가장 위에 있는 카드(가장 먼저 큐에 들어온 수)를 꺼낸다(버린다).
그 다음 카드를 꺼내고 제일 뒤(제일 밑)에 넣는다.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 카드_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Queue<Integer> queue = new LinkedList<>();
//1부터 N까지 큐에 삽입
for (int i=1; i<=N; i++) {
queue.add(i);
}
//카드가 한 장 남을 때까지 반복
while (queue.size() > 1) {
//가장 위에 있는 카드 버리기
queue.poll();
//그 다음 위에 있는 카드 빼서 다시 삽입
queue.add(queue.poll());
}
//마지막 남은 한 장 출력
System.out.println(queue.poll());
}
}