알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 10828번 스택

hibscus 2021. 2. 6. 23:02

 

 

 

 

말 그대로 스택을 구현하는 문제입니다.

 

 

명령어를 내리면, 그 명령에 맞는 행동을 하거나 결과값을 출력하는 건데요.

 

 

 

 

저는 이 문제를 통해 큰 깨달음을 하나 얻었는데요..

 

바로 ".함수를 제대로 알고 쓰자!" 입니다.

 

함수 기능은 알고 있었지만, 그 미묘한 차이를 구분하지 않고 그냥 썼던 것이 발단이 되어 한시간을 헤매게 만들었습니다..

 

 

 

 

원인은 바로 맨 마지막 줄인 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 공감할 수 있었어요!