말 그대로 스택을 구현하는 문제입니다.
명령어를 내리면, 그 명령에 맞는 행동을 하거나 결과값을 출력하는 건데요.
저는 이 문제를 통해 큰 깨달음을 하나 얻었는데요..
바로 ".함수를 제대로 알고 쓰자!" 입니다.
함수 기능은 알고 있었지만, 그 미묘한 차이를 구분하지 않고 그냥 썼던 것이 발단이 되어 한시간을 헤매게 만들었습니다..
원인은 바로 맨 마지막 줄인 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 공감할 수 있었어요!
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 4344. 평균은 넘겠지(소수점 처리) - 파이썬 (0) | 2021.02.10 |
---|---|
[백준 알고리즘] 8958. OX퀴즈 - 파이썬 (0) | 2021.02.10 |
[백준 알고리즘] 11653번 소인수분해 _ 파이썬 python (1) | 2021.02.04 |
[백준 알고리즘] 11399번 ATM_ python 파이썬 (0) | 2021.02.04 |
[백준 알고리즘] 은근히 까다로운 1712번 손익분기점 _ 파이썬 (0) | 2021.02.04 |