https://www.acmicpc.net/problem/2164

1부터 N까지의 카드가 위 1 , 아래 N 의 형태로 쌓여있을 때
두가지 행동을 반복한다.
한장이 남을 때 까지 반복한다.
N = 5 일때, 즉 카드가 1,2,3,4,5 다섯 장 있을 때.
맨 위 카드를 버린다.
2,3,4,5
다음 맨 위가 된 카드를 가장 아래에 깐다.
3,4,5,2
맨위 카드를 버린다.
3,4,5
다음 맨 위가 된 카드를 가장 아래에 깐다.
4,5,3
맨 위 카드를 버린다.
5, 3
다음 맨 위가 된 카드를 가장 아래에 깐다.
5, 3
맨 위 카드를 버린다.
3
즉 , N이 5인 케이스에서는 3이 남으며 종료됨.
이런식으로 진행되는 알고리즘을 코드로 구현하라.
import sys
from collections import deque
N = int(sys.stdin.readline())
deck = deque()
for i in range(1,N+1):
deck.append(i) // N이 5라면 1,2,3,4,5 를 deque에 넣어줌
while len(deck) > 1: // deck의 개수가 1 보다 크다면 계속 반복
deck.popleft(); // 맨 위 제거
if len(deck) >= 2: // 맨 위를 제거 하고 카드의 개수가 2 이상이라면 맨 위 카드를 아래에 복제하고 맨 위 카드 삭제.
deck.append(deck[0])
deck.popleft()
print(deck[0]); // 한장 남을때 까지 반복하고 마지막 한장 출력