백준 2164번 카드 2 - python

tomkitcount·2025년 4월 5일

매일 알고리즘

목록 보기
17/302

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

문제 :

1부터 N까지의 카드가 위 1 , 아래 N 의 형태로 쌓여있을 때
두가지 행동을 반복한다.

  1. 맨 위 카드를 버린다.
  2. 다음 맨 위가 된 카드를 가장 아래에 깐다.

한장이 남을 때 까지 반복한다.

예시 :

N = 5 일때, 즉 카드가 1,2,3,4,5 다섯 장 있을 때.

  1. 맨 위 카드를 버린다.
    2,3,4,5

  2. 다음 맨 위가 된 카드를 가장 아래에 깐다.
    3,4,5,2

  3. 맨위 카드를 버린다.
    3,4,5

  4. 다음 맨 위가 된 카드를 가장 아래에 깐다.
    4,5,3

  5. 맨 위 카드를 버린다.
    5, 3

  6. 다음 맨 위가 된 카드를 가장 아래에 깐다.
    5, 3

  7. 맨 위 카드를 버린다.
    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]); // 한장 남을때 까지 반복하고 마지막 한장 출력
profile
To make it count

0개의 댓글