본문 바로가기
파이썬알고리즘

백준 2164 (deque) 파이썬

by zho 2022. 5. 9.

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

 

2164번: 카드2

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

www.acmicpc.net


코드

from collections import deque
n = int(input())
box = deque()
count = 0
for i in range (n):
    box.append(i + 1)
while len(box) != 1:
    count += 1
    if count % 2 == 1:
        box.popleft()
    else:
        box.append(box.popleft())
print(box[0])

풀이

 

처음 문제 풀 때에는 간단하게 요소를 삭제할 때에는 box.pop()을 이용하고,  맨 앞 원소를 맨 뒤로 옮기는 작업은 box.append(box.pop(0))을 이용했다. 하지만 코드를 제출하니 시간 초과가 떠버렸다. 

 

검색을 해보니 deque를 이용해서 풀면 되는것이었다. deque는 double ended queue의 약자이며 큐와 스택을 둘 다 만들 수 있는 자료구조이다. 그리고 양 끝단에서 모두 push와 pop이 가능하다. 특히 파이썬에서 collections 모듈 안의 deque는 속도면에서 훨씬 빠르기 때문에, 알고리즘 문제를 풀 때에는 보통 deque를 많이 사용한다고 하니 익숙해지도록 하자.

 

 

728x90

'파이썬알고리즘' 카테고리의 다른 글

백준 10250 파이썬  (0) 2022.05.15
백준 10866 (duque) 파이썬  (0) 2022.05.10
백준 11758 CCW 파이썬  (0) 2022.05.09
백준 14002 파이썬  (0) 2022.05.04
백준 10845번 큐 (파이썬)  (0) 2022.04.23