알고리즘/알고리즘 공부(python)

백준_10866_덱/Using(파이썬/Python)

소소한필통 2022. 6. 28. 23:58

Problem

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

 

10866번: 덱

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

www.acmicpc.net

 

About Problem

문제 그대로 deque를 구현을 하면된다. python은 collection 라이브러리에 deque모듈이 있기 때문에 구현이 쉽다.

시간 계산은 N이 100000이기 때문에 시간은 여유롭다.

 

Code

deque모듈의 함수를 쓰면 되기 때문에 주석을 보고 순서와 push만 판단하면 문제는 쉽다.

from sys import stdin
from collections import deque

N = int(stdin.readline())
# deque 모듈 사용
lst = deque()

for _ in range(N):
    # word를 먼저 받아오기
    word = stdin.readline().strip()
    # 마지막 인자가 글자인지 수인지 판단 후에 push인지 아닌지 판단
    if word[-1].isnumeric():
        # push는 글자와 숫자를 split으로 구분
        word, num = word.split()
        if word == 'push_back':
            deque.append(lst, int(num))
        else:
            deque.appendleft(lst, int(num))
    
    else:
        # size와 empty는 len이 0 일 때 출력이 다르기 때문에 먼저 조건문에 넣기
        if word == 'size':
            print(len(lst))

        elif word == 'empty':
            if len(lst):
                print(0)
            else:
                print(1)
        # len이 0일 때 나머지 4개는 -1출력이기 때문에 이 조건 먼저 넣기
        elif not len(lst):
            print(-1)

        else:
            # 나머지는 조건에 맞게 deque모듈의 함수를 잘 써주면 된다.
            if word == 'pop_front':
                print(deque.popleft(lst))

            elif word == 'pop_back':
                print(deque.pop(lst))

            elif word == 'front':
                print(lst[0])

            else:
                print(lst[-1])