10828번: 스택

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

이 문제는 말 그대로 스택을 구현하는 것이다. 그냥 기본적인 스택의 특성만 알고 있으면 이 문제는 쉽게 해결할 수 있다. 그런데 나는 처음에 index error가 났었다. 분명히 index 처리 확실히 했다고 생각했는데 왜 그랬는지 이유를 몰랐었다. 그러다가 딱 보니 top 명령어에서 length에 따라서 다르게 출력하는 처리를 안 해줬었다. 이런 실수를 하다니... 아무튼 그 부분을 고쳐서 제대로 제출 완료했다. 역시나 그 부분을 제외한 코드는 맞았다! 인덱스 처리를 제대로 봐야겠다!!

import sys

n = int(sys.stdin.readline())
s = []

for _ in range(n):
    l = sys.stdin.readline().split()
    if l[0] == "push":
        s.append(l[1])
    elif l[0] == "pop":
        if len(s) == 0:
            print(-1)
        else:
            print(s.pop())
    elif l[0] == "size":
        print(len(s))
    elif l[0] == "empty":
        if len(s) == 0:
            print(1)
        else:
            print(0)
    elif l[0] == "top": #**내가 틀렸던 부분! index error 주의**
        if len(s) == 0:
            print(-1)
        else:
            print(s[-1])