BOJ 10828. 스택 (Python)

2021. 2. 16. 15:58Problem Solving/BOJ

BOJ 10828. 스택

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

 

10828번: 스택

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

www.acmicpc.net

풀이

어려운 문제는 아니나, 파이썬으로 풀이를 할 때 pop() 함수에 파이썬 내장함수 pop()을 사용하면 재귀호출을 하는 불상사가 생긴다. 이것이 유일하게? 주의할 점이다.

 

그래서 stack_top 변수로 스택의 사이즈를 관리하고, pop할때는 임시변수에 담았다가 del을 이용해 리스트에서 삭제하고, 임시변수에 담은것을 return 해 주었다.

if len(command) > 1:
        if command[0] == "push":
            tmp = int(command[1])
            s.push(tmp)

길이가 1보다 크면 무조건 push이기때문에 이렇게 해 주었고,

배열의 첫번째 원소인 command[0]는 항상 명령어이기 때문에 command[0]으로 명령어를 판단하는것으로 했다.

 

소스코드

import sys

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

    def push(self, x: int):
        self.stack.append(x)
        self.stack_top += 1

    def pop(self):
        if self.stack_top == -1:
            return -1
        tmp = self.stack[self.stack_top]
        del self.stack[self.stack_top]
        self.stack_top -= 1
        return tmp

    def size(self):
        return self.stack_top + 1

    def empty(self):
        if self.stack_top == -1:
            return 1
        else:
            return 0

    def top(self):
        if self.stack_top == -1:
            return -1
        return self.stack[self.stack_top]

s = Stack()

N = int(input())
for _ in range(N):
    command = sys.stdin.readline().split()
    if len(command) > 1:
        if command[0] == "push":
            tmp = int(command[1])
            s.push(tmp)
    else:
        if command[0] == "pop":
            print(s.pop())
        elif command[0] == "size":
            print(s.size())
        elif command[0] == "empty":
            print(s.empty())
        elif command[0] == "top":
            print(s.top())

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

BOJ 11723. 집합 (Python)  (0) 2021.02.19
BOJ 11866. 요세푸스 문제 0 (Python)  (0) 2021.02.17
BOJ 10816. 숫자 카드 2 (Python)  (0) 2021.02.16
BOJ 9012. 괄호 (Python)  (0) 2021.02.16
BOJ 1978. 소수 찾기 (Python)  (0) 2021.02.15