본문 바로가기
카테고리 없음

[백준] 10845번 큐(queue) 구현하기

by 9루트 2023. 1. 9.

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')

출처: https://hwiyong.tistory.com/191