본문 바로가기

코딩 테스트/백준

[Python] 백준 2164 카드 2

 

문제 분석

  • 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))