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

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

문제

https://www.acmicpc.net/submit/10845/51424407

문제 설명

deque

  • python에서는 collections 모듈에서 deque를 지원한다.
  • deque는 스택과 큐가 합쳐진 자료구조로, 양쪽 방향에서 모두 append와 pop이 가능하다.
  • 일반 리스트와 같이 append, pop을 사용하고, 왼쪽에서 원소를 추가할 떈 appendleft() 왼쪽에서 pop할 떈 popleft()명령어를 사용하면 된다.

두개의 스택

  • 두개의 스택으로 que처럼 사용할 수 있다.
  • 왼쪽에서 모든 원소를 가지고 있다가, append, push명령이 들어오면 오른쪽 스택에 모두 pop한다.
  • 그렇다면 오른쪽 스택은 왼쪽 스택의 반대의 순서를 가지며, 거기서 pop()하는 순서는 큐와 같은 First In First Out이 된다.

코드

python collections의 deque모듈 사용

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

que = deque()

order_dict = {
    'push' : (lambda x: que.append(x)),
    'pop' : (lambda x: print(que.popleft() if que else -1)),
    'size' : (lambda x: print(len(que))),
    'empty' : (lambda x: print(0 if que else 1)),
    'front' : (lambda x: print(que[0] if que else -1)),
    'back' : (lambda x: print(que[-1] if que else -1))
}

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

두개의 Stack 이용

left = []
right = []

for i in range(int(input())):
   order = input().strip().split()
   if order[0] == 'push':
       left.append(order[1])

   elif order[0] == 'pop':
       if left:
           while left:
               right.append(left.pop())
           print(right.pop())
           while right:
               left.append(right.pop())
       else:
           print(-1)
         
   elif order[0] == 'size':
       print(len(left))

   elif order[0] == 'empty':
       print(0 if left else 1)

   elif order[0] == 'front':
       print(left[-1])

   elif order[0] == 'back':
       print(left[0])
profile
Talking Potato

0개의 댓글