18258번: 큐 2
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
이문제에 관한 포스팅을 작성하게된 계기는 간단하다
쉬운문제라고 생각해 언릉 구현을 해서 제출하고보니 시간초과가 떠버렸다
why~ why~ 새로운 개념을 배우고 푼 첫문제이니만큼 포스팅을 작성할 가치가 있는 문제라고 생각했기때문이다
import sys
input=sys.stdin.readline
queue=[]
N= int(input()) # 명령의 개수
for i in range(N):
question=input().strip()
if question[:4]=='push':
queue.append(question[5:])
elif question == 'pop':
if len(queue) == 0:
print(-1)
else:
queue.pop(0)
elif question == 'size':
print(len(queue))
elif question == 'empty':
if len(queue) == 0:
print(1)
else:
print(0)
elif question == 'front':
if len(queue) == 0:
print(-1)
else:
print(queue[0])
elif question == 'back':
if len(queue) == 0:
print(-1)
else:
print(queue[-1])
틀렷습니다가 아닌 시간초과이다
대체 어디서 시간이 낭비되었을까
검색을해보니 리스트로 직접 구현한 큐보다 모듈을 이용한 방법이 더빠르다고 한다
Python으로 구현하는 자료구조 : Queue (1) Queue
이번 포스팅에서는 자료구조 큐(Queue)에 대한 특징을 살펴보고 파이썬으로 큐에 원소를 삽입, 삭제, 조회하는 코드를 짜보도록 하겠습니다. # Queue란? 큐란 목록 한쪽 끝에서만 자료를 넣고 다른
daimhada.tistory.com
collections 쓴 방법이 가장 간단해보여서 사용하였다
import sys
from collections import deque
input=sys.stdin.readline
# queue=[]
queue=deque([])
N= int(input()) # 명령의 개수
for i in range(N):
question=input().strip()
if question[:4]=='push':
queue.append(question[5:])
elif question == 'pop':
if len(queue) == 0:
print(-1)
else:
print(queue[0])
queue.popleft()
elif question == 'size':
print(len(queue))
elif question == 'empty':
if len(queue) == 0:
print(1)
else:
print(0)
elif question == 'front':
if len(queue) == 0:
print(-1)
else:
print(queue[0])
elif question == 'back':
if len(queue) == 0:
print(-1)
else:
print(queue[-1])
맞았다
queue리스트를 사용하는대신에 deque([])를 사용한다
pop(0)대신 popleft()를 사용한다
앞으로 큐 자료구조 문제를 풀때 시간절약을 위해서 이방법을 써보는것도 나쁘지않을듯 싶다
프린터 큐 백준 파이썬 (0) | 2022.09.03 |
---|---|
코테 만점을 맞다 (0) | 2022.09.02 |
백준 오큰수 파이썬 (0) | 2022.08.28 |
백준 괄호 파이썬 (0) | 2022.08.25 |
백준 스택 파이썬 (0) | 2022.08.21 |