본문 바로가기

코딩테스트 준비/[백준]

[백준] 2164번 - 카드2 (파이썬)

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

[코드]

처음에는 python list의 내장함수로 풀었다.

N = int(input())
queue = [i for i in range(1, N + 1)]

while len(queue) > 1:
    queue.pop(0)
    queue.append(queue.pop(0))
print(queue[0])

그랬더니, 시간초과가 발생하였다.

그래서 동일한 알고리즘을 deque 를 이용해 풀었더니 통과하였다.

from collections import deque

N = int(input())
queue = deque([i for i in range(1, N + 1)])

while len(queue) > 1:
    queue.popleft()
    queue.append(queue.popleft())
print(queue[0])

 

다음의 참고사이트에 따르면 

1. append와 pop의 경우에는 List와 Deque 둘 다 Time Complexity가 O(n)으로 별차이가 없음

2. appendleft popleft의 경우에 Deque가 훨씬 빠름

https://poorman.tistory.com/412

 

[Time Complexity] Python - Deque vs List performance comparison (append, appendleft, pop, popleft)

[Time Complexity] Python - Deque vs List performance comparison (append, appendleft, pop, popleft) [시간 복잡도] 파이썬 - Deque vs List 퍼포먼스 비교 (append, appendleft, pop, popleft) code n = 1..

poorman.tistory.com

결론) deque 를 쓰자.