[백준 알고리즘] 10828번 스택
말 그대로 스택을 구현하는 문제입니다.
명령어를 내리면, 그 명령에 맞는 행동을 하거나 결과값을 출력하는 건데요.
저는 이 문제를 통해 큰 깨달음을 하나 얻었는데요..
바로 ".함수를 제대로 알고 쓰자!" 입니다.
함수 기능은 알고 있었지만, 그 미묘한 차이를 구분하지 않고 그냥 썼던 것이 발단이 되어 한시간을 헤매게 만들었습니다..
원인은 바로 맨 마지막 줄인 pop이였는데요.
원래는 pop(-1)이 아닌 remove(stack[-1])로 했습니다.
pop(-1), remove(stack[-1]) 둘다 stack =[1, 2, 3] 인 경우에는 두개 다 3을 반환해서 정상적으로 작동합니다.
하지만, stack = [2, 3, 4, 3] 인 경우에는? pop은 뒤의 3을 반환하게 되서 [2, 3, 4]가 남게 되고 remove는 앞의 3을 반환해서 [2, 4, 3]이 남게 됩니다.
pop(-1), remove(stack[-1]) 둘다 맨뒤의 숫자를 하나 없애주는 것처럼 보여서 오히려 일반적인 오류보다 더 이유를 찾기 힘들었습니다😥
한번 오류의 굴레에 빠지니 나오기가 힘들어 스터디에 문의했는데요. 스터디장님께서 발견해주셨어요!!☺ 집단지성의 힘 👏
# 조막만한 TIP
import sys
input = sys.stdin.readline
n= input()
sys.stdin.readline 를 사용하면 코드 돌리는 시간이 빨라집니다.
input을 썼을 때 시간초과로 통과되지 못한 것들도 sys.stadin.readline을 쓰면 통과가 되는 경우도 있습니다.
import sys
input = sys.stdin.readline
n = int(input())
stack = []
for i in range(n):
command = input().split()
if command[0] == 'push':
stack.append(int(command[1]))
elif command[0] == 'top':
if not stack:
print(-1)
else:
print(stack[-1])
elif command[0] == 'empty':
if stack:
print(0)
else:
print(1)
elif command[0] == 'size':
print(len(stack))
elif command[0] == 'pop':
if not stack:
print(-1)
else:
print(stack[-1])
stack.pop(-1)
이 문제를 통해 차라리 Error라고 뜨는게 더 반갑다는 말에 *10000000000 공감할 수 있었어요!