카드2

문제 풀러가기

2164

코드

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 BufferedWriter(System.out));

    int n = Integer.parseInt(br.readLine());

    Queue<Integer> que = new LinkedList<>();

    for(int i = 1; i <= n; i++) {
      que.add(i);
    }

    while(que.size() != 1) {
      que.poll();
      que.add(que.poll());
    }

    bw.write(que.poll() + "\n");

    br.close();
    bw.flush();
    bw.close();
  }
}

설명

큐를 쓰면 간단하다. 1부터 n까지 큐에 채운 다음, 처음 수를 제거하고 그 다음수는 제거함과 동시에 다시 넣으면 맨뒤로 가게 된다. 큐에 수가 한 개 남을 때까지 반복한 후 마지막 남은 수를 출력하면 된다.