문제 분석
- 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))
'코딩 테스트 > 백준' 카테고리의 다른 글
[Python] 백준 2346 풍선 터뜨리기 (0) | 2024.09.11 |
---|---|
[Python] 백준 11866 요세푸스 문제 0 (0) | 2024.09.11 |
[Python] 백준 18258 큐 2 (0) | 2024.09.11 |
[Python] 백준 12789 도키도키 간식드리미 (0) | 2024.09.10 |
[Python] 백준 4949 균형잡힌 세상 (0) | 2024.09.10 |