알고리즘/Python

백준 알고리즘: 10828번 스택 (Python)

두넌 2023. 5. 23.

문제 정보


 

 

10828번: 스택

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

www.acmicpc.net

 

 

 

핵심


스택은 기본적인 자료구조형이고 알고있었던 내용이라 구현하는 것은 쉬웠던 것 같다

구현하는 것에 대한 방식의 차이는 있을 수 있지만 대부분 풀이는 비슷할 것 같다

 

풀이


import sys

class solv:
    def __init__(self):
        self.stack = []

    def push(self, item):
        self.stack.append(item)

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

    def size(self):
        return len(self.stack)

    def empty(self):
        if self.size() > 0: return 0
        else: return 1

    def pop(self):
        if self.empty() == 1:
            return -1
        return self.stack.pop()

_ = sys.stdin.readline()
input = sys.stdin.read().split('\n')
st = solv()

for str in input:
    if len(str.split()) > 1:
        st.push(str.split()[1])
    if str == 'pop': print(st.pop())
    elif str == 'size': print(st.size())
    elif str == 'empty': print(st.empty())
    elif str == 'top': print(st.top())

N을 나타내는 수는 사실상 남은 모든 문장을 읽어버리고 배열 안의 내용을 iterate 하면 되기 때문에 함수 이름을 사용하지 않고 버리는 값으로 설정하였다

클래스를 지정하고, 해당 클래스에 여러 메서드들을 정의하여 str이 1보다 크면 push, 아니면 각 명령어와 같은지 비교하는 과정을 진행하였다

 

고찰


3항 연산자

if com[0] == 'pop':
            print(queue.pop(0) if queue else -1)

다른 분의 풀이를 보고 위의 내용은 내가 다음에 풀었던 문제인 '큐' 코드의 일부인데
다음과 같이 3항 연산자를 사용하면 코드를 더 간결하게 짤 수 있을 것 같다는 생각을 하였다

댓글