본문 바로가기

알고리즘

[자료구조] 백준 10828번 스택 Python 풀이

728x90
반응형

문제 요약

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

  • push X: 정수 X를 스택에 넣는 연산
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력.
  • size: 스택에 들어있는 정수의 개수 출력
  • empty: 스택이 비어있으면 1, 아니면 0 출력
  • top: 스택의 가장 위에 있는 정수 출력. 만약 스택에 들어있는 정수가 없는 경우에는 -1 출력.

백준 10828번 문제 바로가기

입력

첫 번째 줄에 명령의 수 N (1 <= N <= 10,000) 입력

둘째 줄부터 N개의 줄까지 명령 하나씩 입력

주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같음

문제에 나와있지 않은 명령이 주어지는 경우 X

출력

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

입출력 예시

입력 출력
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
2
2
0
2
1
-1
0
1
-1
0
3
7
pop
top
push 123
top
pop
top
pop
-1
-1
123
123
-1
-1

코드

약 15분 소요

import sys


class Stack:
    def __init__(self):
        self.stack = []

    def push(self, data):
        self.stack.append(data)

    def pop(self):
        if self.empty():
            return -1
        else:
            return self.stack.pop()

    def size(self):
        return len(self.stack)

    def empty(self):
        if len(self.stack) == 0:
            return 1
        else:
            return 0

    def top(self):
        if self.empty():
            return -1
        else:
            return self.stack[-1]


N = int(input())
S = []
stack = Stack()
result = 0
for _ in range(N):
    S.append(sys.stdin.readline().rsplit())
for i in range(N):
    if S[i][0] == "push":
        stack.push(S[i][1])
        continue
    elif S[i][0] == "pop":
        result = stack.pop()
    elif S[i][0] == "size":
        result = stack.size()
    elif S[i][0] == "empty":
        result = stack.empty()
    elif S[i][0] == "top":
        result = stack.top()
    print(result)

피드백

스택을 어떻게 구현할지 몰라서 스택에 대해 공부하는데 시간이 걸렸다.

class로 구현하는 것을 배워서 배운대로 써먹어봤다.

다른 사람들은 class로 구현하지 않고 직접 명령어를 사용해서 더 빠르게 동작하는 것 같다.

깨달은 것

  • input()으로는 시간 초과되어 sys.stdin.readline() 사용
  • class로 구현하지 않으면 더 빠름
728x90
반응형