자료구조의 첫 번째인 스택을 구현하는 문제입니다.
스택은 Last In First Out으로, 나중에 들어오는 값이 먼저 출력된다는 뜻입니다. (줄여서 LIFO - 후입 선출 이라고도 합니다.)
문제를 그대로 따라가면 풀리는데 문제는 input()을 그대로 사용하면 시간 초과 문제가 발생합니다.
따라서, 조금 더 시간을 적게 소모하는 sys.stdin.readline을 사용하여 input을 재정의하면 시간 초과가 발생하지 않습니다.
import sys
input = sys.stdin.readline # 시간 초과 error를 해결하기 위한 input함수 재정의
rep_num = int(input()) # 명령어 개수 입력
stack = [] # stack list
for _ in range(rep_num): # 명령어 개수만큼 반복
command = input() # 명령어 한 줄 입력
if "push" in command: # 명령어가 push라면
stack.append(int(command.split(" ")[1])) # 공백을 기준으로 split 한 후, 1번 인덱스 값을 int로 변환하여 stack에 저장
elif "pop" in command: # 명령어가 pop라면
if len(stack) == 0: # 빈 stack이라면 -1 출력
print(f"{-1}")
else: # 빈 stack이 아니라면 stack의 마지막 값 추출 및 출력
print(stack.pop())
elif "size" in command: # 명령어가 size라면
print(len(stack)) # stack의 크기 출력
elif "empty" in command: # 명령어가 empty라면
if len(stack) == 0: # 빈 stack이라면 1 출력
print(f"{1}")
else: # 빈 stack이 아니라면 0 출력
print(f"{0}")
else: # 명령어가 top라면
if len(stack) == 0: # 빈 stack이라면 -1 출력
print(f"{-1}")
else: # 빈 stack이 아니라면 stack의 마지막 값 출력
print(stack[-1])
'Algorithm Test > BaekJoon' 카테고리의 다른 글
BaekJoon 10845 - 큐 (Python) (0) | 2022.02.28 |
---|---|
BaekJoon 1406 - 에디터 (Python) (0) | 2022.02.25 |
BaekJoon 1847 - 스택 수열 (0) | 2022.02.24 |
BaekJoon 9012 - 괄호 (0) | 2022.02.23 |
BaekJoon 9093 - 단어 뒤집기 (0) | 2022.02.22 |