꾸준히 합시다

백준 파이썬 18258번: 큐 2 본문

코딩 테스트 문제 풀이

백준 파이썬 18258번: 큐 2

tturbo0824 2021. 3. 11. 10:08

www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

문제 유형: 자료 구조, 큐

 

# Solution 1 - 시간 초과

import sys
input = sys.stdin.readline

arr = []

for _ in range(int(input())):
    cmd = list(map(str, input().split()))
    if cmd[0] == "push":
        arr.append(int(cmd[1]))
    elif cmd[0] == "pop":
        if arr:
            print(arr.pop(0))
        else:
            print(-1)
    elif cmd[0] == "size":
        print(len(arr))
    elif cmd[0] == "empty":
        if arr:
            print(0)
        else:
            print(1)
    elif cmd[0] == "front":
        if arr:
            print(arr[0])
        else:
            print(-1)
    elif cmd[0] == "back":
        if arr:
            print(arr[-1])
        else:
            print(-1)

 

# Solution 2

import sys
from collections import deque

input = sys.stdin.readline

arr = deque()

for _ in range(int(input())):
    cmd = list(map(str, input().split()))
    if cmd[0] == "push":
        arr.append(int(cmd[1]))
    elif cmd[0] == "pop":
        if arr:
            print(arr.popleft())
        else:
            print(-1)
    elif cmd[0] == "size":
        print(len(arr))
    elif cmd[0] == "empty":
        if arr:
            print(0)
        else:
            print(1)
    elif cmd[0] == "front":
        if arr:
            print(arr[0])
        else:
            print(-1)
    elif cmd[0] == "back":
        if arr:
            print(arr[-1])
        else:
            print(-1)

deque를 사용하지 않고 풀었더니 시간 초과가 떴다. deque로 구현하여 popleft() 함수로 pop()을 대체하고, 혹시 몰라 PyPy3로 제출하였더니 통과되었다.

 

 

Comments