본문 바로가기

백준

[백준] 18258 - 큐 2

반응형

1. 문제

 

2. 코드

from collections import deque
import sys

n = int(input())
l = deque([])

for i in range(n):
    s = sys.stdin.readline()
    #s = input()
    
    #push
    if s[1] == 'u':
        s, num = s.split()
        l.append(int(num))
    
    #pop
    elif s[0] == 'p':
        if len(l) == 0:
            print(-1)
            continue
        #temp = l[start]
        temp = l.popleft()
        #start += 1
        print(temp)
    
    #size
    elif s[0] == 's':
        print(len(l))
    
    #empty
    elif s[0] == 'e':
        if len(l) == 0:
            print(1)
        else:
            print(0)
    
    #front
    elif s[0] == 'f':
        if len(l) == 0:
            print(-1)
            continue
        print(l[0])
    
    #back
    if s[0] == 'b':
        if len(l) == 0:
            print(-1)
            continue
        print(l[len(l)-1])

 

3. 풀이

이 문제의 관건은 deque를 사용하는 것이다.

front, 즉 제일 앞의 값을 꺼내오는 게 있기 때문이다.

단순히 list를 사용해서 pop(0)을 하면 list 크기에 따라 시간이 달라지기 때문에 시간초과가 난다. O(n)이다.

그런데 deque로 popleft()를 하면 O(1)로 수행할 수 있다.

 

 

728x90
반응형