백준 스택 10828번

​안녕하세요. GDSC 머신러닝 멤버 김민찬입니다.
​ ​이번주부터 스택에 대해 공부하게 되었습니다.
스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조입니다.
값을 꺼낼 때는 마지막에 넣은 값이 먼저 꺼내지기 때문에 LIFO(Last In First Out) 구조라고도 합니다.
저희가 자주 사용하는 Ctrl + Z, 뒤로가기 기능에도 사용된다고 합니다.

image


아래의 명령들은 문제의 조건이기도 하지만 동시에 스택 구현의 조건이기도 합니다.

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

스택

아래는 제가 문제를 해결한 과정입니다. 직접 클래스를 통해 구현하였고 리스트를 사용하였습니다.

class Stack:
    def __init__(self): #생성자
        self.stack_list = []
    def push(self, num):
        self.stack_list.append(num)
    def pop(self):
        if len(self.stack_list) == 0:
            print("-1")
        else:
            print(self.stack_list.pop())
    def size(self):
        print(len(self.stack_list))
    def empty(self):
        if len(self.stack_list) == 0:
            print("1")
        else :
            print("0")
    def top(self):
        if len(self.stack_list) == 0:
            print("-1")
        else :
            print(self.stack_list[-1])

import sys

N = int(sys.stdin.readline())
s = Stack()

for _ in range(N):
    command = sys.stdin.readline().split()
    if command[0] == "push":
        s.push(command[1])
    elif command[0] == "pop":
        s.pop()
    elif command[0] == "size":
        s.size()
    elif command[0] == "empty":
        s.empty()
    else :
        s.top()


풀고 난 후에 다른 문제 풀이에 대해 찾아보았는데, 대부분 비슷하게 푸는 것 같습니다.
다만, 시간 초과 문제가 발생할 수 있는데 input()을 sys.stdin.readline()로 바꾸고 PyPy3로 제출하는 것으로 해결할 수 있었습니다.