본문 바로가기

스터디 1일 1커밋

240219 [BOJ/백준] 18258. 큐 2

 

https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net


나의 코드

from collections import deque
from sys import stdin; input = stdin.readline
N = int(input())
cmd = []
# front = rear = -1
q = deque()
for n in range(N):
    cmd.append(input().split())
# print(cmd)
for i in cmd:
    if i[0] == 'push':
        q.append(i[1])
    elif i[0] == 'pop':
        if len(q) != 0:
            print(q.popleft())
        else:
            print(-1)
    elif i[0] == 'size':
        print(len(q))
    elif i[0] == 'empty':
        if q:
            print(0)
        else:
            print(1)
    elif i[0] == 'front':
        if q:
            print(q[0])
        else:
            print(-1)
    elif i[0] == 'back':
        if q:
            print(q[-1])
        else:
            print(-1)

 

결과


스택문제를 이틀 전에 풀어서인지 큐문제는 금방 풀 수 있었다. 친구들의 스택코드를 보면서 좀 더 간결하게 코드를 짜는 방법도 알 수 있었고 적용할 수 있었다. 스택에서 시간초과로 애먹었어서 이번 큐에서는 시간초과가 나오지 않게 짜려고 노력했지만 계속 시간초과가 나왔다. 처음에는 파이썬이 느려서인가 싶어서 파이파이3로 제출했다. 그래도 시간초과가 됐고 그냥 큐를 써서 pop(0)의 시간이 오래걸리나 싶어서 디큐로 popleft()로 시간을 줄여보려고 했다. 그래도 시간초과가 되어서 입력할 때 readline으로 빠르게 읽을 수 있도록 해서 맞을 수 있었다. 코드는 같은데 어떤 자료형(?)을 쓰는지에 따라서 동작시간도 달라질 수 있다는 것을 항상 생각해봐야 할 것 같다.