https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
코드는 저번의 stack 처럼 for문과 if문을 이용하여 간단하게 구현하였다.
단, input() 대신에 시간 초과를 방지하기 위해 sys.stdin.readline()으로 사용하였다.
> 특히 입력값이 띄어쓰기 공백이 아닌 줄바꿈 공백으로 이루어져 있을 때 유용하다.
그리고 리스트의 원소를 지울 때 쓰는 del과 remove의 차이는
del은 특정 인덱스의 원소를 지울 때 쓰고
remove는 특정 원소의 인덱스를 몰라도 상관없이 해당 원소를 지울 때 쓴다.
# BOJ_10845
import sys
# 입력
n = int(input())
queue = []
for _ in range(n):
command = list(map(str, sys.stdin.readline().split()))
# push
if command[0] == 'push':
queue.append(command[1])
# pop
elif command[0] == 'pop':
if len(queue) == 0:
print(-1)
else:
print(queue[0])
del queue[0]
# size
elif command[0] == 'size':
print(len(queue))
# empty
elif command[0] == 'empty':
if len(queue) == 0:
print(1)
else:
print(0)
# front
elif command[0] == 'front':
if len(queue) == 0:
print(-1)
else:
print(queue[0])
# back
elif command[0] == 'back':
if len(queue) == 0:
print(-1)
else:
print(queue[-1])
클래스로 구현한 것도 눈여겨 봐야겠다.
Case = int(input())
queue = Queue()
while (Case > 0):
Case -= 1
input_split = input().split()
order = input_split[0]
if (order == 'push'):
queue.push(input_split[1])
elif (order == 'pop'):
print(queue.pop())
elif (order == 'size'):
print(queue.size())
elif (order == 'empty'):
print(queue.empty())
elif (order == 'front'):
print(queue.front())
elif (order == 'back'):
print(queue.back())
else:
print('xx')