[BOJ 28278] 스택 2

sliver gun·2024년 5월 11일

알고리즘

목록 보기
6/30

문제 요약

문제 요약
정수를 저장하는 스택을 구현하고, 5가지 명령을 구현해라
입력
첫째 줄 : 명령의 수
둘째 줄 ~ N+1번째 줄 : 각 명령
출력
명령의 결과

풀이

스택을 class로 구현한 뒤 입력에 맞게 조건문을 설정하여 입력에 따라 명령을 실행하도록 구현한다.

숫자 입력의 개수를 모를 때

명령에서 1(put)의 경우에는 넣을 숫자로 하나 더 입력을 받는다.
입력을 1개 받을지, 2개 받을지 모른다면 어떻게 처리해야 할까?

N = list(map(int, input().split()))

간단하다.
list로 받아서 처리하면 된다.

신경써야 할 부분

2번, 5번 명령에 '스택에 정수가 없다면 -1을 출력한다'라는 명령을 잊으면 안 된다.
명령의 수가 1,000,000개까지 있을 수 있으므로 입력할 때의 러닝타임을 줄이기 위해
sys.stdin을 활용한다.

결과 코드

import sys
input = sys.stdin.readline

class stack:
    def __init__(self):
        self.top = []
    def put(self, n):
        self.top.append(n)
    def pop(self):
        if not self.isEmpty():
            return self.top.pop()
        else:
            return -1
    def length(self):
        return len(self.top)
    def isEmpty(self):
        if self.length() == 0:
            return 1
        else:
            return 0
    def isTop(self):
        if not self.isEmpty():
            return self.top[self.length()-1]
        else:
            return -1

s = stack()
for i in range(int(input())):
    N = list(map(int, input().split()))
    if N[0] == 1:
        s.put(N[1])
    elif N[0] == 2:
        print(s.pop())
    elif N[0] == 3:
        print(s.length())
    elif N[0] == 4:
        print(s.isEmpty())
    elif N[0] == 5:
        print(s.isTop())

0개의 댓글