https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
*링크로 접속하여 문제를 확인할 수 있습니다.
문제 설명
FIFO(First In First Out) 구조로 되어 있는 자료구조 Queue를 구현하는 문제이다. FIFO는 가장 먼저 push로 들어간 요소가 pop하면 가장 먼저 나오도록 하는 구조이다.
이 문제에선 push, pop, size, empty, front, back 6가지 명령을 수행하는 큐 자료구조를 구현해야 한다.
push는 큐에 정수를 넣는 연산을 하며, pop은 가장 앞에 있는 정수를 빼고 출력, size는 정수의 개수를 출력, empty는 큐가 비어있는지 확인, front와 back은 각각 맨 앞과 맨 뒤의 정수를 출력해야 한다. 이 때 pop, front, back을 할 때 큐가 비어있다면 -1을 출력하도록 한다.
코드
from sys import stdin
queue = []
num = int(stdin.readline())
for i in range(num):
command = stdin.readline().split()
if command[0] == "push":
queue.append(command[1])
elif command[0] == "pop":
if len(queue) == 0:
print(-1)
else:
p = queue.pop(0)
print(p)
elif command[0] == "size":
print(len(queue))
elif command[0] == "empty":
if len(queue) == 0:
print(1)
else:
print(0)
elif command[0] == "front":
if len(queue) == 0:
print(-1)
else:
print(queue[0])
elif command[0] == "back":
if len(queue) == 0:
print(-1)
else:
print(queue[-1])
간단하게 input을 이용하면 시간 초과가 되기 때문에 from sys import stdin을 하고 입력받는 부분을 모두 stdin.readline()으로 해서 해결했다.
나머지는 간단하게 queue라는 리스트를 만들고 이 리스트를 활용하도록 했다.
command를 입력받아 명령어가 push면 append로 queue 리스트에 추가했고, pop이라면 queue가 비어있으면 -1을, 비어있지 않다면 0번째 위치에 있는 요소를 pop해서 출력했다. size는 queue 리스트의 길이를 출력하고, empty는 길이가 0이라면 1을, 아니라면 0을 출력한다. front와 back은 queue의 길이가 0이면 -1을 출력하고, 아닌 경우에는 각각 맨 앞의 요소와 맨 뒤의 요소를 출력한다.
간단한 자료구조 구현 문제이지만, stdin.readline()을 사용하지 않고 input()을 사용하면 시간 초과 문제가 발생하기 때문에 이를 다시 한 번 생각해보는 시간이었다.
'BAEKJOON 백준' 카테고리의 다른 글
| [BAEKJOON/Python3] 백준 1316 그룹 단어 체커 (0) | 2022.01.04 |
|---|---|
| [BAEKJOON/Python3] 백준 1920 수 찾기 (0) | 2022.01.02 |
| [BAEKJOON/Python3] 백준 10039 평균 점수 (0) | 2022.01.01 |
| [BAEKJOON/Python3] 백준 2438 별 찍기 - 1 (0) | 2021.02.26 |
| [BAEKJOON/Python3] 백준 15656 N과 M (7) (0) | 2021.02.24 |