2164번: 카드2

canyi·2023년 4월 28일
0

백준

목록 보기
1/19

문제

시간 제한: 2초

리스트의 append & pop을 사용한 경우

num = int(input())
cards = list(range(1, num+1))

while len(cards) > 1:
    cards.pop(0)

    cards.append(cards.pop(0))

print(cards[0])

collections의 deque를 사용한 경우(1)

from collections import deque

num = int(input())
cards = range(1, num+1)
dq = deque(cards)

# 카드가 1장 이상일 경우 첫번째 배열 삭제 & 삭제후 첫번째 배열을 마지막 배열에 추가
while len(dq) > 1:
    dq.popleft()
    dq.append(dq.popleft())
    print(dq)

card_string = ' '.join(map(str, dq))
print(card_string[0])

collections의 deque를 사용한 경우(2)

class에서 str로 변환하지 않고 바로 deque의 popleft() 출력
결국 마지막 배열 한개만 남기 때문에 굳이 문자열로 변환해서 출력할 필요가 없었다.

from collections import deque

num = int(input())
cards = range(1, num+1)
dq = deque(cards)

# 카드가 1장 이상일 경우 첫번째 배열 삭제 & 삭제후 첫번째 배열을 마지막 배열에 추가
while len(dq) > 1:
    dq.popleft()
    dq.append(dq.popleft())
    print(dq)

print(dq.popleft())

while vs deque (퍼포먼스)

50만장 카드를 넣을 경우

while 문

import time

# 첫 번째 코드
start_time = time.time()

num = int(input())
cards = list(range(1, num+1))

while len(cards) > 1:
    cards.pop(0)
    cards.append(cards.pop(0))

print(cards[0])

end_time = time.time()

print("첫 번째 코드 실행 시간: ", end_time - start_time)

deque

from collections import deque
import time
# 두 번째 코드
start_time = time.time()

num = int(input())
cards = range(1, num + 1)
dq = deque(cards)

while len(dq) > 1:
    dq. popleft()
    dq.append(dq.popleft())

print(dq.popleft())

end_time = time.time()
print("두 번째 코드 실행 시간: ", end_time - start_time)

profile
백엔드 개발 정리

0개의 댓글