[Coding test] (바킹독 알고리즘) 덱 (feat. Python)
바킹독 알고리즘 강의 「큐」 내용을 바탕으로, 코딩 테스트에서 코드 작성 방법을 Python 기준으로 정리한 글입니다
[Coding test] (바킹독 알고리즘) 덱 (feat. Python)
INTRO
🔑 KEY POINT
덱의 성질
- 원소의 추가가 O(1)
- 원소의 제거가 O(1)
- 제일 상단의 원소 확인이 O(1)
- 제일 앞/뒤가 아닌 나머지 원소들의 확인/변경이 원칙적 불가능
기능과 구현
- 덱 앞쪽에 원소를 추가, O(1) :
deque.appendleft(x)ordeque.extendleft(iterable)- 덱 뒤쪽에 원소를 추가, O(1) :
deque.append(x)ordeque.extend(iterable)- 덱 앞쪽 원소를 제거, O(1) :
deque.popleft()- 덱 뒤쪽의 원소를 제거, O(1) :
deque.pop()- 덱의 원소를 k 만큼 회전, O(k) :
deque.rotate(k)
extend 여러 요소를 순회하며 덱의 끝에 차례로 추가하지만 append의 차이점은 요소 하나를 덱의 끝에 추가한다.
ex.
appendvsextend1 2 3 4 5 6 7 8 9 10 11 12
lst2 = ['a', 'b', 'c', 'd'] lst2.append('ef') # append() lst.extend('ef') # extend() print("lst.extend('ef') >> ", lst) print("lst2.append('ef') >>", lst2) ''' 결과 lst.extend('ef') >> ['a', 'b', 'c', 'd', 'e', 'f'] lst2.append('ef') >> ['a', 'b', 'c', 'd', 'ef'] '''
rotate(n)은 n이 음수이면 왼쪽으로 회전하고, 양수이면 오른쪽으로 회전한다.
ex.
1 2 3 4 5 6 7 8 9 10 11 12 13
deq = collections.deque(['a', 'b', 'c', 'd', 'e']) deq.rotate(2) print('deq >>', ' '.join(deq)) deq1 = collections.deque(['a', 'b', 'c', 'd', 'e']) deq1.rotate(-2) print('deq1 >>', ' '.join(deq1)) ''' 결과 deq >> d e a b c deq1 >> c d e a b '''
🔗 강의 링크
문제 풀이
강의에서는 C++ 언어로 문제를 풀이하셨고 저는 파이썬으로 문제를 풀려고 합니다.
문제에 대한 설명 또한 강의자님의 설명을 그대로 가져온 것입니다.
My Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import sys
from collections import deque
input = sys.stdin.readline
deq = deque()
for _ in range(int(input())):
command = input().split()
if command[0] == 'push_front':
deq.appendleft(command[1])
elif command[0] == 'push_back':
deq.append(command[1])
elif command[0] == 'pop_front':
if deq:
print(deq.popleft())
else:
print(-1)
elif command[0] == 'pop_back':
if deq:
print(deq.pop())
else:
print(-1)
elif command[0] == 'size':
print(len(deq))
elif command[0] == 'empty':
if deq:
print(0)
else:
print(1)
elif command[0] == 'front':
if deq:
print(deq[0])
else:
print(-1)
elif command[0] == 'back':
if deq:
print(deq[-1])
else:
print(-1)
This post is licensed under CC BY 4.0 by the author.
