만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj

[python] 백준 10828번: 스택 (파이썬으로 스택 구현하기)

D36choi 2020. 8. 6. 21:33
728x90

 

https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

 

C++ STL 엔 stack 이 있지만, 파이썬엔 없다.

 

파이썬은 list 가 stack 의 역할을 할 수 있다.

정말 강력한 언어라는게 체감이 되는 문제.

또한 파이썬엔 switch/case 가 없다고 한다.

왜냐면 그냥 if/elif 가 그 역할을 다할 수 있으니까 그런 것 같다.

 

 

from sys import stdin

stack = []


def push(X):
    stack.append(X)


def pop():
    if len(stack) == 0:
        print(-1)
    else:
        print(stack.pop())


def size():
    print(len(stack))


def empty():
    if len(stack) == 0:
        print(1)
    else:
        print(0)


def top():
    if len(stack) == 0:
        print(-1)
    else:
        print(stack[-1])


# main
T = int(stdin.readline())

for i in range(T):
    command = list(stdin.readline().split())
    if command[0] == "push":
        push(command[1])
    elif command[0] == "pop":
        pop()
    elif command[0] == "size":
        size()
    elif command[0] == "empty":
        empty()
    elif command[0] == "top":
        top()

 

push 는 다른 명령어와 다르게,

공백으로 구분되는 2개의 문자열을 받게 된다.

ex) push 132 , push 1, push 1010

나머지 명령어는 단순히 명령어 문자열 1개만을 받는다.

그래서 커맨드에는 최대 2개의 문자열이 저장 된다.

아래 처럼,

 

command = ["push","132"]

 

그래서 명령어는 index 0, 2nd argument 인 number는 index 1로 접근했다.