문제

tier 카드2

풀이

먼저 큐에 부터 까지 차례대로 넣습니다. 그리고 큐에서 하나를 뽑아서 버리고, 또 하나 뽑아 큐에 다시 넣는 것을 큐에 원소가 하나가 남을 때 까지 반복하면 됩니다.

코드

Python

from collections import deque
 
n = int(input())
queue = deque()
for i in range(1, n+1):
    queue.append(i)
 
while len(queue) > 1:
    queue.popleft()
    queue.append(queue.popleft())
print(queue.pop())

C++

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
 
    int n;
    cin >> n;
    queue<int> q;
    for (int i = 1; i <= n; i++) {
        q.push(i);
    }
    while (q.size() > 1) {
        q.pop();
        q.push(q.front());
        q.pop();
    }
    cout << q.front();
 
    return 0;
}

Java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int n = Integer.parseInt(br.readLine());
        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());
        }
        bw.write(queue.peek() + "");
        bw.close();
    }
}