알고리즘 스터디 스택 - 10828번
study백준 스택 10828번
안녕하세요. GDSC 머신러닝 멤버 김민찬입니다.
이번주부터 스택에 대해 공부하게 되었습니다.
스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조입니다.
값을 꺼낼 때는 마지막에 넣은 값이 먼저 꺼내지기 때문에 LIFO(Last In First Out) 구조라고도 합니다.
저희가 자주 사용하는 Ctrl + Z, 뒤로가기 기능에도 사용된다고 합니다.
아래의 명령들은 문제의 조건이기도 하지만 동시에 스택 구현의 조건이기도 합니다.
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로 제출하는 것으로 해결할 수 있었습니다.