본문 바로가기
IT/알고리즘

백준 - 10828번(스택)

by Sungjun_ 2020. 11. 4.

문제

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

 

10828번: 스택

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

www.acmicpc.net

 


코드

import sys

class Stack:
    def __init__(self):
        self.stk = [None] * 10000
        self.ptr = 0

    def push(self, value):
        self.stk[self.ptr] = value
        self.ptr += 1

    def pop(self):
        self.ptr -= 1
        if self.ptr < 0:
            self.ptr = 0
            return -1
        return self.stk[self.ptr]

    def size(self):
        return self.ptr

    def empty(self):
        if self.ptr <= 0:
            return 1
        return 0

    def top(self):
        if self.ptr <= 0:
            return -1
        return self.stk[self.ptr - 1]

 

Stack 클래스를 정의해서 안에 필요 함수들을 넣었습니다.

먼저 명령의 수가 최대 10000개이기 때문에 push를 최대 10000번 한다는 가정 하에 

self.stk = [None] * 10000을 했습니다. 

pop 부분에서 self.ptr이 0보다 작아질 경우에는 스택이 비어있다는 뜻이기 때문에

포인터를 다시 0으로 만들어줍니다.

 

N = int(input())
s = Stack()

for i in range(N):
    cmd = sys.stdin.readline().rstrip().split()
    menu = cmd[0]

    if menu == 'push':
        s.push(cmd[1])

    elif menu == 'pop':
        print(s.pop())

    elif menu == 'size':
        print(s.size())

    elif menu == 'empty':
        print(s.empty())

    elif menu == 'top':
        print(s.top())

 


결과

 

결과

 

 

'IT > 알고리즘' 카테고리의 다른 글

알고리즘 - 스택(deque)  (0) 2020.11.06
백준 - 1874번(스택 수열)  (0) 2020.11.04
알고리즘 - 스택(stack)  (0) 2020.11.03
알고리즘 - 해시법(3)  (0) 2020.11.02
알고리즘 - 해시법(2)  (0) 2020.10.27

댓글