[BOJ]白俊2164号カード2(Python)



質問する


カードが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)を与える.
  • しゅつりょく


    出力は
  • の最初の行のカード番号に残ります.

  • 入力

    6

    しゅつりょく

    4

    に答える

    from collections import deque
    
    N = int(input())
    cards = deque(x for x in range(1, N + 1))
    
    isPass = False
    
    while len(cards) > 1:
        if isPass:
            cards.append(cards.popleft())
            isPass = False
        else:
            cards.popleft()
            isPass = True
    
    print(cards[0])