白駿-カード2(2164)



Queue


質問する


カードがN枚あります.各カードには順番に1からNの番号が貼られており、1番札が一番上に、N番札が一番下に、順番にカードが置かれています.
カードが1枚残るまで、以下の動作を繰り返します.まず、一番上の札を地面に投げます.そして、一番上のカードを一番下のカードの下に移動します.
例えば、N=4とする.カードは一番上から1234の順番に並べられています.1を投げてまだ234残っています.ここで2を一番下に移動すると342です.3を42に、4を下に移動すると24になります.最後に2を捨てて、残りのカードは4になりました.
Nが付与されると、最後に残ったカードを取得するプログラムを作成してください.

入力


第1行は整数N(1≦N≦500000)を与える.

しゅつりょく


最初の行に残っているカード番号を出力します.
from collections import deque

n = int(input())
arr = deque(list((i + 1) for i in range(n)))
# 반복문으로 append하는 것보다 바로 할당하는게 메모리 절약

while len(arr) > 1:
    arr.popleft()
    arr.append(arr.popleft())
    
print(arr.pop())
簡単で重要な例は、キューの実装時にPython Dequeライブラリを使用することです.