sm 기술 블로그

158. 2164(카드2) - 파이썬 본문

문제/백준_파이썬

158. 2164(카드2) - 파이썬

sm_hope 2022. 7. 26. 14:01
from collections import deque
import sys
input = sys.stdin.readline

N = int(input())
queue = deque(list(i for i in range(1, N+1)))

while(len(queue) != 1):
    queue.popleft()
    queue.append(queue.popleft())

print(queue.pop())

문제요약

N장의 카드가 있는데 제일 위의 카드는 버리고 버리고 난 뒤 제일 위의 카드를 맨아래로 보내는 식으로 한장의 카드가 남을 때 까지 반복한다.

설명

큐를 이용한 쉬운 문제이다.

 

여기서 제일 위는 제일 앞을 뜻하므로 큐를 이용한다.

queue = deque(list(i for i in range(1, N+1)))

1~N까지의 카드를 큐에 저장한다.

 

while(len(queue) != 1):
    queue.popleft()
    queue.append(queue.popleft())

 카드가 한 장일 때까지 반복하며,

1. 제일 위의 카드는 버린다 (queue.popleft())

2. 버린 상태에서 제일 위의 카드를 제일 아래로 보낸다. (queue.append(queue.popleft()))

 

print(queue.pop())

마지막으로 한 장 있는 카드를 pop을 통해 출력한다.

Comments