[백준] 18258 큐 2 Python

2024. 6. 21. 23:53Python/백준

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

 

📝  문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.

push X : 정수 X를 큐에 넣는 연산이다.
pop : 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size : 큐에 들어있는 정수의 개수를 출력한다.
empty : 큐가 비어있으면 1, 아니면 0을 출력한다.
front : 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back : 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

🔎  풀이

큐 구현해서 풀면 된다.

처음에는 인덱싱과 pop() 함수를 사용해서 해결하려고 했는데, 시간 초과 문제를 해결하지 못해 rear와 front를 사용하는 방식으로 바꿨다.

모든 함수들에 대해 rear와 front의 값이 -1인 경우까지 생각하면 문제를 해결할 수 있다.

 

💻  코드

import sys

queue = []
front = -1
rear = -1

def push(num):
    global queue, rear, front
    rear += 1
    if rear == 0:
        front += 1
    queue.append(num)

def pop():
    global queue, rear, front
    if rear >= front and (rear != -1):
        print(queue[front])
        front += 1
    else:
        print(-1)

def size():
    global queue, rear, front
    if rear >= front and (rear != -1):
        print(rear - front + 1)
    else:
        print(0)

def empty():
    global queue, rear, front
    if rear >= front and (rear != -1):
        print(0)
    else:
        print(1)

def front_func():
    global queue, rear, front
    if rear >= front and (rear != -1):
        print(queue[front])
    else:
        print(-1)

def back():
    global queue, rear, front
    if rear >= front and (rear != -1):
        print(queue[rear])
    else:
        print(-1)

N = int(input())
for i in range(N):
    req = sys.stdin.readline().split()

    if req[0] == "push":
        push(req[1])
    elif req[0] == "pop":
        pop()
    elif req[0] == "size":
        size()
    elif req[0] == "empty":
        empty()
    elif req[0] == "front":
        front_func()
    elif req[0] == "back":
        back()