백준 알고리즘 기초 1/2, 200 - 자료구조1 10866번 덱

HyeonKi Jo·2022년 11월 14일
0
post-thumbnail

문제

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

문제 설명

  • 이전 요세푸스 문제와 비슷하게 두개의 스택으로 문제를 해결하였다.

코드

class Deque:
    left = []
    right = []

    # 덱의 front를 맡을 left에 push
    def push_front(self, x):
        self.left.append(x)

    # 덱의 back을 맡을 right에 push
    def push_back(self, x):
        self.right.append(x)

    # pop_front == left스택에서 pop
    def pop_front(self, x):
    	# left가 비었다면 right에서 모두 pop하고 가장 앞의 원소를 꺼낸다.
        if not self.left :
            if not self.right:
                val = -1
            else:
                while self.right :
                    self.left.append(self.right.pop())
                val = self.left.pop()
                while self.left:
                    self.right.append(self.left.pop())
        else:
            val = self.left.pop()
        print(val)

    # 반대로 back을 맡은 right스택에서 pop
    def pop_back(self, x):
    	# right가 비어있다면, left에서 모두 pop한 후에, 가장 앞의 원소 출력
        if not self.right: 
            if not self.left:
                val = -1
            else:
                while self.left :
                    self.right.append(self.left.pop())
                val = self.right.pop()
                while self.right:
                    self.left.append(self.right.pop())
        else:
            val = self.right.pop()
        print(val)

    # 사이즈는 left와 right의 사이즈의 합이다.
    def size(self, x):
        print(len(self.left) + len(self.right))

    # left, right 둘다 체크한다.
    def empty(self, x):
        print(1 if not (self.left or self.right) else 0)

    # left의 뒤에서부터 확인하고, left가 비었다면 right의 [0] 출력
    def front(self, x):
        if not self.left:
            if not self.right:
                val = -1
            else:
                val = self.right[0]
        else:
            val = self.left[-1]
        print(val)

	# right의 뒤에서부터 확인하고, right가 비어있다면 left[0]에서 확인
    def back(self, x):
        if not self.right:
            if not self.left:
                val = -1
            else:
                val = self.left[0]
        else:
            val = self.right[-1]
        print(val)

import sys
input=sys.stdin.readline

deque = Deque()

order_dict = {
    'push_front' : deque.push_front,
    'push_back' : deque.push_back,
    'pop_front' : deque.pop_front,
    'pop_back' : deque.pop_back,
    'size' : deque.size,
    'empty' : deque.empty,
    'front' : deque.front,
    'back' : deque.back
}

for i in range(int(input().strip())):
    order = input().strip().split()
    order.append('')
    order_dict[order[0]](order[1])
profile
Talking Potato

0개의 댓글