알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 덱(10866)

HRuler 2023. 1. 12. 16:50

1. 문제

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

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

2. 풀이

from collections import deque
import sys
input = sys.stdin.readline

# n : 입력받는 명령 수
n = int(input())

# int_deq : 정수를 입력받을 deque
int_deq = deque()

for i in range(n):
    order = input().strip()
    if 'push_front' in order:
        order_int = int(order.split()[1])
        int_deq.appendleft(order_int)
    elif 'push_back' in order:
        order_int = int(order.split()[-1])
        int_deq.append(order_int)
    elif 'pop' in order:
        if len(int_deq) == 0:
            print(-1)
        elif 'front' in order:
            print(int_deq.popleft())
        elif 'back' in order:
            print(int_deq.pop())
    elif 'size' == order:
        print(len(int_deq))
    elif 'empty' == order:
        if len(int_deq) == 0:
            print(1)
        else:
            print(0)
    elif 'front' == order:
        if len(int_deq) == 0:
            print(-1)
        else:
            print(int_deq[0])
    elif 'back' == order:
        if len(int_deq) == 0:
            print(-1)
        else:
            print(int_deq[-1])

3. 후기

 - 문제의 설명에 해당 문제는 deque를 만들어 사용하라고 한다. 때문에 이전 문제를 해결할 때 사용했던 collections 라이브러리의 deque를 사용하여 해결했다.