sm 기술 블로그
158. 2164(카드2) - 파이썬 본문
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을 통해 출력한다.
'문제 > 백준_파이썬' 카테고리의 다른 글
160. 1966(프린트 큐) - 파이썬 (0) | 2022.07.26 |
---|---|
159. 11866(요세푸스 문제 0) - 파이썬 (0) | 2022.07.26 |
157. 18258(큐) - 파이썬 (0) | 2022.07.25 |
156. 17298(오큰수) - 파이썬 (0) | 2022.07.25 |
155. 1874(스택 수열) - 파이썬 (0) | 2022.07.22 |
Comments