728x90

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

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

10828 스택문제와 마찬가지로 Queue의 기본 기능을 구현하는 문제였다.

 

# 조건

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

# 접근 방법

  • 각 기능들을 함수로 구현한 후 입력에서 명령부분만 쪼개어서 확인해주었다.
  • 굳이 함수 정의를 해주지 않아도 될 것 같지만, 가독성을 생각하며 함수로 구현해주었다.

 

import sys

# 정수 X를 스택에 넣는 연산이다.
def push(x):
    queue.append(x)

# 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 
# 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
def pop():
    if(not queue):
        return -1
    else:
        return queue.pop(0)

# 스택에 들어있는 정수의 개수를 출력한다.
def size():
    return len(queue)

# 스택이 비어있으면 1, 아니면 0을 출력한다.
def empty():
    return 0 if queue else 1

# 스택의 가장 위에 있는 정수를 출력한다. 
# 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
def front():
    return queue[0] if queue else -1

def back():
    return queue[-1] if queue else -1

N = int(sys.stdin.readline().rstrip())
queue = []

for _ in range(N):
    input_split = sys.stdin.readline().rstrip().split()

    order = input_split[0]

    if order == "push":
        push(input_split[1])
    elif order == "pop":
        print(pop())
    elif order == "size":
        print(size())
    elif order == "empty":
        print(empty())
    elif order == "front":
        print(front())
    elif order == "back":
        print(back())

 

 

728x90