이것저것 공부 기록하기

[Algorithm] 1일1솔 - 백준 18258 큐2 (python3) 본문

Algorithm/Baekjoon

[Algorithm] 1일1솔 - 백준 18258 큐2 (python3)

얍욥얍 2021. 12. 17. 15:07

오늘부터 나도 1일1문제 시작.

오늘의 문제 : https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

# sys.stdin.readline() 을 사용해야 시간초과 안 나고 통과됨 (같은 풀이일 때 input() 으로 받면 시간초과남)
import sys
from collections import deque
n = int(sys.stdin.readline())
q = deque()
for i in range(n):
    tmp = sys.stdin.readline().split()
    order = tmp[0]
    if order == 'push':
        q.append(tmp[1])
    elif order == 'pop':
        if q:
            print(q.popleft())
        else:
            print(-1)
    elif order == 'size':
        print(len(q))
    elif order == 'empty':
        if not q:
            print(1)
        else:
            print(0)
    elif order == 'front':
        if q:
            print(q[0])
        else:
            print(-1)
    elif order == 'back':
        if q:
            print(q[-1])
        else:
            print(-1)

풀이는 간단한 조건문들로 큐를 구현하는 것인데 n과 명령문들을 input으로 받으니까 계속 시간초과가 났다.

sys.stdin.readline으로 받으니까 무난하게 통과되었다.

일반적으로 list로 구현하면 pop할 때 del 함수 쓰게 되므로 나머지 요소들이 앞으로 당겨지는 데에 시간이 걸리기 때문에 deque로 구현해서 popleft를 이용했다. 이후에 deque 안 쓰고 list로도 문제를 풀어봐야겠다. 

반응형
Comments