문제
풀이 (Python)
import sys
input=sys.stdin.readline
n=int(input())
input_arr=[]
stack=[]
def is_empty():
if len(stack)==0:
return True
return False
for _ in range(n):
input_arr=list(map(int,input().split()))
if input_arr[0]==1:
stack.append(input_arr[1])
elif input_arr[0]==2:
if is_empty():
print(-1)
else:
print(stack[-1])
del stack[-1]
elif input_arr[0]==3:
print(len(stack))
elif input_arr[0]==4:
if is_empty():
print(1)
else:
print(0)
else:
if is_empty():
print(-1)
else:print(stack[-1])
설명 (Python)
스택 2 문제는 기존 스택의 문제와 매우 유사하기에 스택 문제를 참고하길 바란다.
keypoint 1 - is_empty함수의 활용
비어있다면 -1 출력 또는 비어있으면~ 하는 구현이 많으므로 is_empty함수를 따로 구현하여 중복을 제거하였다.
return에 -1을 넣기보단 ture와 false bool형을 활용하여하면 if is_empty: 와 같이 가독성 좋게 만들 수 있다.
n=int(input())
input_arr=[]
stack=[]
def is_empty():
if len(stack)==0:
return True
return False
for _ in range(n):
input_arr=list(map(int,input().split()))
if input_arr[0]==1:
stack.append(input_arr[1])
elif input_arr[0]==2:
if is_empty():
print(-1)
else:
print(stack[-1])
del stack[-1]
elif input_arr[0]==3:
print(len(stack))
elif input_arr[0]==4:
if is_empty():
print(1)
else:
print(0)
else:
if is_empty():
print(-1)
else:print(stack[-1])
이 문제에서도 시간초과 해결이 핵심인데, 입력횟수가 많으므로 그냥 input을 사용하면 시간초과가 발생하게 된다.
keypoint 2 - sys를 통한 시간단축
sys를 import를 하여 input 자체를 sys.stdin.readline으로 변수를 입력하여 input을 그대로 쓰지만 시간초과 문제를 해결하게 된다.
import sys
input=sys.stdin.readline
자료구조 또는 스택의 개념에 대해 참고하고 싶다면 다음 글을 참고 바란다.
'Baekjoon' 카테고리의 다른 글
[백준] 20115번 에너지 드링크 (파이썬) (0) | 2023.09.19 |
---|---|
[백준] 1343번 폴리오미노 (파이썬) (0) | 2023.09.19 |
[백준] 2164번 카드2 (파이썬) (0) | 2023.09.07 |
[백준] 11279번 최대 힙 ( 파이썬 ) (0) | 2023.07.31 |
[백준] 11726번 2xn 타일링 ( 파이썬 / c언어 ) (0) | 2023.07.26 |