CS/알고리즘_문제풀이(파이썬)

백준 - 스택 #10828

Jedy_Kim 2021. 3. 29. 22:20
728x90

문제

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

명령은 총 다섯 가지이다.

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

입력

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

출력

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

 

예제 입력 1

14

push 1

push 2

top

size

empty

pop

pop

pop

size

empty

pop

push 3

empty

top

 

예제 출력 1 

 

2

2

0

2

1

-1

0

1

-1

0

3

 

예제 입력 2

7

pop

top

push 123

top

pop

top

pop

예제 출력 12

-1

-1

123

123

-1

-1

########################내가 작성한 코드[틀림ㅠㅠ]######################## 

import sys

input=sys.stdin.readline

 

stack = []

def push(data):

    stack.append(data)

 

def pop():

    if len(stack) == 0: 

        print(-1)

        return

    data = stack[-1]

    del stack[-1]

    return data

 

def size():

    return len(stack)

 

def empty():

    return 1 if len(stack) == 0 else 0

 

def top():

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

 

num = int(input()) 

 

while(num > 0):

    num -= 1

    get_val = input().split()

    op_val = get_val[0]    

    if op_val == 'push':

        push(int(get_val[1]))

    elif op_val == 'pop':

        print(pop())

    elif op_val == 'size':

        print(size())

    elif op_val == 'empty':

        print(empty())

    elif op_val == 'top':

        print(top())

####################################################################

#########################다른 사람이 작성한 코드#########################

import sys

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

 

stack=[]

for i in range(n):

    command = sys.stdin.readline().split()

 

    if command[0]=='push':

        stack.append(command[1])

    elif command[0]=='pop':

        if len(stack)==0:

            print(-1)

        else:

            print(stack.pop())

    elif command[0] == 'size':

        print(len(stack))

    elif command[0] == 'empty':

        if len(stack)==0:

            print(1)

        else:

            print(0)

    elif command[0] == 'top':

        if len(stack)==0:

            print(-1)

        else:

            print(stack[-1])

####################################################################

'''

파이썬은 따로 stack 구조를 제공하지 않는다.

기본 클래스 list를 이용하여 stack을 표현할 수 있다.

 

이때, input() 함수를 사용할 경우, 시간초과 에러가 뜨므로 시간단축을 위해 sys.stdin.readline()을 사용한다.

입출력 속도 비교 : sys.stdin.readline > raw_input() > input()

'''

출처 : velog.io/@wjdtmdgml/%EB%B0%B1%EC%A4%80%EC%8A%A4%ED%83%9D10828%EB%B2%88%ED%8C%8C%EC%9D%B4%EC%8D%ACPython%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%8A%A4%ED%83%9D

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

GCD LCM  (0) 2021.05.10
상자 꾸미기  (0) 2021.05.10
offset  (0) 2021.05.10
백준 - 스택 수열 #1874  (0) 2021.03.30
백준 - 단어 뒤집기 #9093  (0) 2021.03.29