백준 알고리즘/Lang-Python

[백준/python] 10866 덱

Jongung 2023. 1. 10. 16:54

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

 

10866번: 덱

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

www.acmicpc.net

 

  • 사용언어 : python
  • 알고리즘 : 자료 구조, 덱
  • Solved.ac Tier : Silver IV

 

 

python 코드

1. 문제 정리

1년전 c로 풀어봤던 문제를 다시 파이썬으로 풀어보았다. 파이썬엔 말도안되는 deque가 있기 때문에 굉장히 문제가 쉽다. js로 할 때엔 링크드리스트로 구현 해야 하고 고려 해야 할 것이 2배 이상으로 늘어나서 js로 알고리즘을 하다가 다시 파이썬으로 넘어왔다.

문제에서 주어진 명령어를 모두 구현하면 되는 문제이다. 대부분 명령어들이 deque에서 지원하는 명령어와 같다. append, appendLeft, pop, popLeft를 사용하여 쉽게 해결 할 수 있는 문제이다.

2. 완성 코드

import sys
from collections import deque
deq = deque()
N = int(input())

for i in range(N):
    line = sys.stdin.readline().rstrip().split()
    if(line[0] == "push_front"):
        deq.appendleft(int(line[1]))
    elif (line[0] == "push_back"):
        deq.append(int(line[1]))
    elif (line[0] == "pop_front"):
        if(len(deq) <= 0):
            print(-1)
        else:
            print(deq.popleft())
    elif (line[0] == "pop_back"):
        if (len(deq) <= 0):
            print(-1)
        else:
            print(deq.pop())
    elif (line[0] == "size"):
        print(len(deq))
    elif (line[0] == "empty"):
        if (len(deq) <= 0):
            print(1)
        else:
            print(0)
    elif (line[0] == "front"):
        if (len(deq) <= 0):
            print(-1)
        else:
            print(deq[0])
    elif (line[0] == "back"):
        if (len(deq) <= 0):
            print(-1)
        else:
            print(deq[len(deq) - 1])