알고리즘
[algorithm] 백준 10866 - 덱 (파이썬)
hyuuny
2022. 8. 31. 00:12
📚 문제
입력
출력
예제 입력 1
15
push_back 1
push_front 2
front
back
size
empty
pop_front
pop_back
pop_front
size
empty
pop_back
push_front 3
empty
front
예제 출력 1
2
1
2
0
2
1
-1
0
1
-1
0
3
예제 입력 2
22
front
back
pop_front
pop_back
push_front 1
front
pop_back
push_back 2
back
pop_front
push_front 10
push_front 333
front
back
pop_back
pop_back
push_back 20
push_back 1234
front
back
pop_back
pop_back
예제 출력 2
-1
-1
-1
-1
1
1
2
2
333
10
10
333
20
1234
1234
20
🧑🏻💻 풀이 과정
- n번동안 반복하며 명령어(
command
)를 입력받자. from collections import deque
를 이용하여dq = deque()
를 선언하자.- push_front면 명령어의 11번째부터
appendleft
로 맨 앞에 저장하자. - push_back이면 명령어의 10번째부터
append
로 맨 뒤에 저장하자. - pop_front면 dq에 요소가 있으면 popleft로 맨 앞의 요소로 꺼내면서 출력, 없으면 -1을 출력하자.
- pop_back이면 dq에 요소가 있으면 pop으로 맨 뒤의 요소로 꺼내면서 출력, 없으면 -1을 출력하자.
- size면 de의 사이즈를 출력하자.
- empty면 de에 요소가 있으면 0을 출력하고, 없으면 1을 출력하자.
- front면 dq에 요소가 있으면 dq[0]으로 맨 앞의 요소를 출력, 없으면 -1을 출력하자.
- back이면 dq에 요소가 있으면 dq[-1]로 맨 뒤의 요소를 출력, 없으면 -1을 출력하자.
import sys
from collections import deque
def process():
command = sys.stdin.readline().rstrip()
# push_front
if 'push_front' in command: dq.appendleft(command[11::])
# push_back
if 'push_back' in command: dq.append(command[10::])
# pop_front
if command == 'pop_front': print(dq.popleft()) if dq else print(-1)
# pop_back
if command == 'pop_back': print(dq.pop()) if dq else print(-1)
# size
if command == 'size': print(len(dq))
# empty
if command == 'empty': print(0) if dq else print(1)
# front
if command == 'front': print(dq[0]) if dq else print(-1)
# back
if command == 'back': print(dq[-1]) if dq else print(-1)
dq = deque()
for _ in range(int(sys.stdin.readline().rstrip())):
process()