이번 문제에서는 다음 두 가지 일을 해야 합니다.

  1. 최대 용량이 정해진 FIFO 큐 클래스 구현
  2. 표준 입력으로 들어온 명령어로 큐 조작

1. 최대 용량이 정해진 FIFO 큐 클래스 구현

스택 두 개를 통해 최대 용량이 max_size가 정해진 FIFO 큐 클래스, MyQueue를 구현하세요. 구현할 메소드는 다음과 같습니다.

  1. qsize()
    • 큐가 가진 원소 수를 리턴합니다.
  2. push(x)
    • 입력받은 인자, x를 큐에 넣습니다.
    • 단, 현재 큐가 꽉 찬 경우 인자를 넣지 말고 False를 리턴하세요.
  3. pop():
    • 큐가 가진 원소 중, 가장 처음에 들어온 원소를 큐에서 제거하고 리턴합니다.
    • 큐에 원소가 없다면 Empty Exception을 raise 하세요. Empty Exception은 본인이 직접 만드셔야 합니다.

2. 표준 입력으로 들어온 명령어로 큐 조작

  1. 첫 줄에는 앞으로 들어올 명령어 수 n과 큐의 최대 크기인 max_size가 공백으로 구분되어 주어집니다.
  2. 그 뒤로는 N 줄에 걸쳐, 큐를 조작할 명령어가 주어집니다.
명령어 종류 result
SIZE 현재 큐에 들은 원소 수를 출력합니다.
PUSH X 정수 X를 큐에 넣습니다. 성공했다면 True를, 아니라면 False를 출력합니다.
POP 큐에서 원소를 빼냅니다. 성공했다면 빼낸 원소를, 아니라면 False를 출력합니다.

제한 조건

  • n은 1 이상 100 이하입니다.
  • max_size는 1 이상 100 이하입니다.
  • PUSH 명령어에서 들어오는 X는 -100 이상 100 이하인 정수입니다.

나의 풀이

class MyStack(object):
    def __init__(self):
        self.lst = list()

    def push(self, x):
        self.lst.append(x)

    def pop(self):
        return self.lst.pop()

    def size(self):
        return len(self.lst)

class MyQueue(object):
    def __init__(self, max_size):
        self.stack1 = MyStack()
        self.stack2 = MyStack()
        self.max_size = max_size

    def qsize(self):
        return self.stack1.size() + self.stack2.size()

    def push(self, item):
        if self.qsize() == self.max_size:
            return False
        self.stack1.push(item)
        return True

    def pop(self):
        try:
            if self.stack2.size() == 0:
                while self.stack1.size() > 0:
                    self.stack2.push(self.stack1.pop())
            result = self.stack2.pop()
        except IndexError:
            return False
        return result
    
n, max_size = map(int, input().strip().split(' '))
my_queue = MyQueue(max_size)
for _ in range(n):
    cmd = input().strip()
    if "PUSH" in cmd:
        cmd, elm = cmd.split(" ")
        print(my_queue.push(elm))        
    elif cmd == "POP":
        print(my_queue.pop())
    elif cmd == "SIZE":
        print(my_queue.qsize())