백준 28278번 스택 2 - Python

    문제

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


    문제 해석

    입력

    첫번째 줄에 명령의 개수가 입력되고 그 뒤로 명령이 입력된다. 이때 입력은 다음을 의미한다.
    '1 X' : 스택에 'X' Push
    '2' : 스택이 비었다면 -1을, 아니라면 스택을 Pop하고 삭제한 값을 출력
    '3' : 스택의 길이를 출력
    '4' : 스택이 비었다면 1을, 아니라면 0을 출력
    '5' : 스택의 Top을 출력, 스택이 비었다면 -1을 출력

    출력

    입력 설명 참조.


    풀이

    1번 풀이

    로직은 어렵지 않으나, 파이썬으로 풀어서 그런지 시간이 꽤 벅찼음.
    스택 하나 만들어서 명령 따르면 되는거고,
    핵심은 삼항연산자(크게 의미가 있진 않음.), 클래스, sys라이브러리의 빠른 표준 입출력,
    등을 사용해서 시간을 맞추는거였음.
    Stack을 매개변수로 함수를 호출하는것이 반복되어서 명령을 클래스로 만들었음.

    from sys import stdout, stdin
    
    class Stack:
        def __init__(self):
            self.stack = []
    
        def push(self, x):
            self.stack.append(x)
    
        def pop(self):
            return self.stack.pop() if self.stack else -1
    
        def size(self):
            return len(self.stack)
    
        def empty(self):
            return 1 if not self.stack else 0
    
        def top(self):
            return self.stack[-1] if self.stack else -1
    
    stack = Stack()
    
    for _ in range(int(stdin.readline())):
        command = stdin.readline().split()
    
        if command[0] == '1':
            stack.push(int(command[1]))
    
        elif command[0] == '2':
            stdout.write(str(stack.pop())+'\n')
    
        elif command[0] == '3':
            stdout.write(str(stack.size())+'\n')
    
        elif command[0] == '4':
            stdout.write(str(stack.empty())+'\n')
    
        elif command[0] == '5':
            stdout.write(str(stack.top())+'\n')

    'Algorithm Study' 카테고리의 다른 글

    C언어 기초 문법 총정리 🦖  (0) 2024.02.18
    백준 1874번 스택 수열  (0) 2024.02.18
    귀엽게 생긴 GO랭을 써보자  (0) 2024.02.18
    백준 9506번 약수들의 합  (0) 2024.02.18
    백준 27433번 팩토리얼 2 - Python  (0) 2024.02.18

    댓글