반응형


Python으로 스택(Stack) 구현하기

이번에 면접 대비를 하게 되면서, 간만에 기본에 충실하자! 라는 느낌으로 Python으로 기본적인 자료구조 구현을 진행해보았다. C++로 할 때보다 확실히 쉽고 금방 구현이 가능하다. 특히 Stack의 경우 list에서 애초에 내부적으로 거의 다 구현이 되어있어서 추가적으로 뭔가 만들 필요가 없을 정도다.

 

 

스택(Stack)의 기본 구조


 

  • 구현에 앞서 간략히 스택에 대해 설명해보자면, 아래의 특성을 가진다.

  • 스택은 기본적으로 LIFO(Last In First Out) 구조를 지니고 있는 선형 자료구조이다.

  • 말 그대로 스택(쌓다) 이므로, 주사위 쌓기를 생각해보면 어떤 구조인지 알 수 있다. 쌓기를 시작할 때는 당연히 맨 밑부터 쌓아나가야하며, 데이터를 뺄 때는 맨 위에서부터 뺄 수 밖에 없다.

  • LIFO의 특성을 활용해야하는 다양한 알고리즘 문제 풀이에서 자주 사용된다. 

 

 

스택이 가져야 할 Method 목록


  • push(x) : 스택에 x라는 값을 집어 넣는다.

  • pop() : 스택의 맨 윗부분(마지막에 들어온 원소)를 꺼내고 반환한다.

  • size() : 스택의 길이를 반환한다.

  • empty() : 스택이 비어있는지에 대한 유무를 반환한다.

  • top() : 현재 스택의 맨 위에 있는 원소를 보여준다. (꺼내지는 않음)

 

 

구현


사실 Python에서 기본적으로 쓰이는 list 자료구조가 stack과 같다. 딱히 직접 구현해야 할 내용이 없지만 Class화를 시켜본다면 아래와 같이 구현할 수 있다.

 

그리고 백준에 이를 다루는 문제가 있으니, 직접 풀어보는 것도 좋을 것 같다!
https://www.acmicpc.net/problem/10828

 

'''
    push(x) - input x to stack
    pop() - delete last element of stack and return it
    size() - return length of stack
    empty() - return boolean that checks whether stack has an element
    top() - return top of stack
'''
class HyunStack():
    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 not self.stack

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

if __name__ == "__main__":
    q = HyunStack()
    q.push(1)
    q.push(2)
    print(q.top())
    print(q.size())
    print(q.empty())
    print(q.pop())
    print(q.pop())
    print(q.pop())
    print(q.size())
    print(q.empty())
    q.push(3)
    print(q.empty())
    print(q.top())

 

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,