문제 링크 : https://www.acmicpc.net/problem/10866
풀이
Deque의 다양한 메서드들을 구현하는 문제이다. 파이썬의 deque와 sys.stdin.readline()을 통해 시간제한 안에서 여유롭게 통과할 수 있다. 실버 4 문제라기엔 파이썬 코더에겐 상당히 쉬운 문제라고 할 수 있다.
import sys # sys.stdin.readline()을 사용해 더 빠르게 입력 받기 가능
from collections import deque # list보다 대부분의 경우에서 더 빠른 deque 사용
def push_front(deque, num): # 정수 num을 deque의 앞에 저장
deque.append(num)
def push_back(deque, num): # 정수 num을 deque의 뒤에 저장
deque.appendleft(num)
def pop_front(deque): # deque의 가장 앞에 위치한 정수를 뺀 후에, 그 수 반환
if len(list(deque)) == 0: # 비었다면 -1 출력
print(-1)
else:
print(deque.pop())
def pop_back(deque): # deque의 가장 뒤에 위치한 정수를 뺀 후에, 그 수 반환
if len(list(deque)) == 0: # 비었다면 -1 출력
print(-1)
else:
print(deque.popleft())
def size(deque): # deque에 들어있는 정수의 수 반환
print(len(deque))
def empty(deque): # deque가 비었다면 1을, 그렇지 않다면 0을 반환
if len(deque) == 0:
print(1)
else:
print(0)
def front(deque): # deque의 가장 앞에 위치한 수 반환
if len(deque) == 0:
print(-1)
else:
print(deque[len(deque)-1])
def back(deque): # deque의 가장 뒤에 위치한 수 반환
if len(deque) == 0:
print(-1)
else:
print(deque[0])
deq = deque()
for _ in range(int(sys.stdin.readline())):
cmd = list(sys.stdin.readline().split()) # cmd[0]은 명령어, cmd[1]은 push 될 값
if cmd[0] == 'push_front':
push_front(deq, cmd[1])
if cmd[0] == 'push_back':
push_back(deq, cmd[1])
if cmd[0] == 'pop_front':
pop_front(deq)
if cmd[0] == 'pop_back':
pop_back(deq)
if cmd[0] == 'size':
size(deq)
if cmd[0] == 'empty':
empty(deq)
if cmd[0] == 'front':
front(deq)
if cmd[0] == 'back':
back(deq)
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(Python) 백준 1929번 - 소수 구하기 (0) | 2023.01.11 |
---|---|
(Python) 백준 1874번 - 스택 수열 (0) | 2023.01.10 |
(Python) 백준 10845번 - 큐 (0) | 2023.01.10 |
(Python) 백준 10828번 - 스택 (0) | 2023.01.10 |
(Python) 백준 10816번 - 숫자 카드 2 (0) | 2023.01.10 |