본문 바로가기

BAEKJOON 백준

[BAEKJOON/Python3] 백준 10845 큐

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()을 사용하면 시간 초과 문제가 발생하기 때문에 이를 다시 한 번 생각해보는 시간이었다.