728x90

백준 18258 - 큐2

시간 제한 1초, 메모리 제한 512MB

# 조건

  • 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

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

출력

  • 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

# 접근 방법

  • front와 rear 포인터를 만들고 배열을 2,000,000의 크기로 만들어준 뒤 풀어도 된다.
  • 하지만 파이썬의 deque가 있으므로 편하게 풀 수 있다.
  • q = deque()로 선언해준 후 N번 반복하며 주어지는 명령을 조건문으로 나눠준다.
    • 이후 각 명령어의 설명에 따라 append, popleft, q[0], q[-1]과 같이 조건문 내부에 로직을 구현해주면 된다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  
from collections import deque  

N = int(input())  
q = deque()  
for _ in range(N):  
    query = list(input().strip().split())  
    if len(query) == 2:  
        q1, q2 = query[0], query[1]  
    else:  
        q1 = query[0]  

    if q1 == 'push':  
        q.append(q2)  
    elif q1 == 'pop':  
        print(q.popleft() if q else -1)  
    elif q1 == 'size':  
        print(len(q))  
    elif q1 == 'empty':  
        print(1 if not q else 0)  
    elif q1 == 'front':  
        print(q[0] if q else -1)  
    else:  
        print(q[-1] if q else -1)
728x90