코딩 테스트/백준
[Python] 백준 2164 카드 2
위시리
2024. 9. 11. 01:10
문제 분석
- N장의 카드
- 각 카드는 차례로 1~N까지의 번호
- 1번이 제일 위, N이 제일 아래
- 카드가 한 장 남을 때 까지 다음 동작 반복
- 제일 위의 카드를 버리고 그 다음 제일 위의 카드를 밑으로 옮긴다.
- 이렇게 했을 때 제일 마지막에 남는 카드 구하기
코드 설계
- 속도가 빠른 덱
- 덱의 길이가 1일이면 while문 빠져나오기
- 그 전까지 한번 반복할 때마다 맨 위 popleft
- 그 다음거 popleft 한거 저장해서 append
정답 코드
import sys
input = sys.stdin.readline
from collections import deque
n = int(input())
d = deque()
// d = deque([i for i in range(1, n+1)])
for num in range(1, n+1) :
d.append(num)
while True :
if len(d) == 1:
print(d.popleft())
break
a = d.popleft()
num = d.popleft()
d.append(num)
다른 사람 코드 1 - 큐
n = int(input())
l = list(range(1,n+1))
while (len(l) > 1):
l.pop(0)
tmp = l.pop(0)
l.append(tmp)
print(l.pop(0))