Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

행복한 개구리

백준 22.04.07. 18258번 - 큐 2 본문

Algorithm/BaekJoon

백준 22.04.07. 18258번 - 큐 2

HappyFrog 2022. 4. 7. 18:31

# sys모듈을 임포트하여 출력, 입력부분에서 소요되는 시간을 줄여줍니다.
import sys

# deque를 임포트하여 deque의 기능을 사용할 예정입니다.
# deque를 사용하는 이유는 popleft메서드를 사용하기 위함인데, 이는 pop(0)과 같은 기능을 합니다.
# 하지만 시간적 측면에서 pop(0)은 pop이후에 나머지 요소들의 인덱스를 하나씩 끌어당기는 과정이 필요하므로 시간이 더 오래걸립니다.
# 따라서 popleft를 사용합니다.
from collections import deque

# 아래와 같이 input과 print를 미리 설정해줍니다. print의 매개변수는 반드시 str타입으로 형변환해줘야합니다.
input = sys.stdin.readline
print = sys.stdout.write

# queue의 기능들을 메서드로 만들었습니다.
# push를 제외한 함수들은 값을 반환하도록 하여 출력하기 편하게 해줍니다.
def push(q, n):
    q.append(n)

# popleft()는 deque를 사용할 때 쓸 수 있는 함수입니다.
# q.pop(0)과 같은 기능을 합니다.
def pop(q):
    if len(q) == 0:
        return -1
    else:
        return q.popleft()

def size(q):
    return len(q)

def empty(q):
    if len(q) == 0:
        return 1
    else:
        return 0

def front(q):
    if len(q) == 0:
        return -1
    else:
        return q[0]

def back(q):
    if len(q) == 0:
        return -1
    else:
        return q[-1]

# 입력된 커맨드(c)에 따라 다른 메서드를 실행해줍니다.
# 위에서 설명했듯이 print = sys.stdout.write이므로 매개변수가 반드시 str타입이어야 하며 줄바꿈이 자동이 아니므로 직접 줄바꿈해줍니다.
def command(c, q):
    if c[0] == "push":
        push(q, c[1])
    elif c[0] == "pop":
        print(str(pop(q))+"\n")
    elif c[0] == "size":
        print(str(size(q))+"\n")
    elif c[0] == "empty":
        print(str(empty(q))+"\n")
    elif c[0] == "front":
        print(str(front(q))+"\n")
    elif c[0] == "back":
        print(str(back(q))+"\n")


n = int(input())

q = deque([])

for i in range(n):
    c = input().split()
    command(c, q)
  • 소요시간을 줄이기 위해 sys모듈을 임포트하여 입,출력관련 시간을 절약합니다.
  • 그리고 deque를 사용하여 pop대신 popleft라는 메서드를 사용합니다.
    • 이유는 q를 리스트로 만들어 pop(0)을 쓰면 pop한 이후에 나머지 요소들의 인덱스를 한 칸씩 당기는 과정에서 시간소요가 많이 됩니다.
    • 따라서 시간이 덜 걸리는 deque의 popleft를 사용합니다.
  • 이어서 queue의 기능을 하는 메서드들을 모두 만들어줍니다.
  • command메서드를 만들어 입력받은 명령의 종류에 따라 다른 메서드를 실행하고 출력할 수 있도록 합니다.