BOJ/백준-10828-python

cosmos·2021년 1월 18일
4
post-thumbnail

문제📖

풀이🙏

  • 첫째 줄에 명령의 수 N을 입력받는다.
    -> int(input())을 사용할시, 시간초과가 뜨기때문에, sys 모듈
    n = int(sys.stdin.readline())을 사용한다!!
    (앞으로도 시간 단축을 위해 sys로 데이터를 입력받고 언어도 python 대신 pypy를 사용하자)

    -> 그런데 위와 같이 에러가 떳다!! 구글링을 해보니 코드에러가 아닌 주피터에서는 sys가 허용이 안되는것같다(?) 위의 원인은 후에 제대로 찾아보고 따로 포스팅 할 예정이다.
  • 입력 명령은 다섯가지로 아래와 같다.
  • push X: 정수 X를 스택에 넣는 연산이다.
    -> list에 X를 append
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
    -> python 내장함수 pop 사용, if len(list) == 0: print(-1)
  • size: 스택에 들어있는 정수의 개수를 출력한다.
    -> print(len(list))
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
    -> if len(list) == 0: print(1), else: print(-1)
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
    -> if len(list) == 0: print(-1), else: print(list(len(list) - 1)))

위의 코드들을 보기 편하게, 수정이 용이하도록 간단한 함수로 구현했다.

코드💻

# boj, 10828 : 스택, python3
import sys

n = int(sys.stdin.readline())

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

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

def size():
    return len(stack)

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

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

stack = []

for i in range(n):
    result = sys.stdin.readline().split()
    m = result[0]

    if m == 'push':
        push(result[1])
    elif m == 'pop':
        print(pop())
    elif m == 'size':
        print(size())
    elif m == 'top':
        print(top())
    elif m == 'empty':
        print(empty())
    else:
        print("input command error")
        break

결과😎

출처📝

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

풀코드

github

0개의 댓글