위 문제는 큐(Queue) 자료구조만 이해하고 있다면 쉽게 해결할 수 있었던 문제였습니다. 1이 가장 위에 있다는 것은 카드를 뽑을 때, 가장 먼저 뽑혀야 하기 때문에 큐 자료 구조를 적용하는 것이 맞습니다.
가장 위의 수를 빼내고(poll) 그 다음 수를 가장 밑에 두도록 하여 마지막에 남은 하나의 수를 출력하라는 문제였습니다.
두번째 카드는 가장 밑에 넣어주면(add) 되기 때문에 크게 어려운 로직이 없었습니다.
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Queue;
import java.util.LinkedList;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
br.close();
Queue<Integer> queue = new LinkedList<>();
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());
}
}