[백준] 10828번. 스택 (파이썬)

nayeoniee·2021년 9월 22일
0

Algorithm

목록 보기
26/29

문제

문제 링크

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

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

풀이

리스트를 사용해 스택을 구현한 후, 5가지 함수를 구현했다.

  1. push(x)
def push(x):
    stack.append(x)
  1. pop()
def pop():
    # if len(stack) == 0:
    # if not stack:
    #     return -1
    # else:
    #     return stack.pop()

    return stack.pop() if stack else -1

pop(), empty(), top()은 스택이 비어있는지 검사해야하는데, 처음에len(stack) == 0을 스택이 비어있는 경우로 간주해 결과가 이상하게 나왔다.
스택이 비어있는지 확인하려면 if stack:으로 확인해야 한다.

  1. size()
def size():
    return len(stack)
  1. empty()
def empty():
    return 0 if stack else 1
  1. top()
def top():
    return stack[-1] if stack else -1

pop()은 스택의 가장 위에 있는 값을 반환하면서 삭제하지만, top()은 삭제하지 않고 반환만 한다.
둘 다 스택의 가장 위에 있는 값을 반환하지만, 삭제 여부가 다르다.

전체 코드

# 리스트로 스택 구현
def push(x):
    stack.append(x)

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

def size():
    return len(stack)

def empty():
    return 0 if stack else 1

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

import sys
N = int(input())
stack = []

for _ in range(N):
    input_split = sys.stdin.readline().rstrip().split()
    cmd = input_split[0]
    if cmd == "push":
        push(input_split[1])
    elif cmd == "pop":
        print(pop())
    elif cmd == "size":
        print(size())
    elif cmd == "empty":
        print(empty())
    elif cmd == "top":
        print(top())
profile
정말 할 수 있어!

0개의 댓글