Python 62 - DFS/BFS (1) 꼭 필요한 자료구조 기초_[스택 ]

2021. 6. 23. 19:13python

반응형

탐색(Search)이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFSBFS를 제대로 이해하려면 기본 자료구조인 스택과 큐에 대한 이해가 전제되어야 하므로 사전 학습으로 스택과 큐, 재귀함수를 간단히 정리하고자 한다.

자료구조(Data Structure)란 '데이터를 표현하고 관리하고 처리하기 위한 구조' 를 의미한다. 그 중 스택는 자료구조의 기초 개념으로 다음의 두 핵심적인 함수로 구성된다.

  • 삽입(Push) : 데이터를 삽입한다.
  • 삭제(Pop) : 데이터를 삭제한다.

물론 실제로 스택과 큐를 사용할 때는 삽입과 삭제 외에도 오버플로언더플로를 고민해야 한다. 오버플로(Overflow)는 특정한 자료 구조가 수용할 수 있는 데이터의 크기를 이미 가득찬 상태에서 삽입 연산을 수행할 때 발생한다. 즉, 저장 공간을 벗어나 데이터가 넘쳐흐를 때 발생한다. 반면에 특정한 자료구조에 데이터가 전혀 들어 있지 않은 상태에서 삭제 연산을 수행하면 데이터가 전혀 없는 상태이므로 언더플로(Underflow)가 발생한다.

 

스택

스택은 박스 쌓기에 비유할 수 있다. 흔히 박스는 아래에서부터 위로 차곡차곡 쌓는다. 그리고 아래에 있는 박스를 치우기 위해 위에 있는 박스를 먼저 내려야한다. 이러한 구조를 선입후출(First In Last Out)구조 또는 후입선출(Last In Fist Out) 구조라고 한다. 아래 그림과 같이 가상의 스택을 하나 준비하여 일련의 연산을 수행해보자. 입구와 출구가 동일한 형태로 스택을 시각화 할 수 있다.

지금부터 다음의 초기 단계에서

삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제( ) - 삽입(1) - 삽입(4) - 삭제( ) 를 순서대로 표현해 보겠다.

스택 예제

stack = []

# 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) - 삭제( ) - 삽입(1) - 삽입(4) - 삭제( )
stack.append(5)
stack.append(2)
stack.append(3)
stack.append(7)
stack.pop()
stack.append(1)
stack.append(3)
stack.pop()

print(stack) # 최하단 원소부터 출력
[5, 2, 3, 1]
print(stack[::-1]) # 최상단 원소부터 출력
[1, 3, 2, 5]

파이썬에서 스택을 이용할 때에는 별도의 라이브러리를 사용할 필요가 없다. 기본 리스트에서 append()와 pop() 메서드를 이용하면 스택 자료구조와 동일하게 동작한다. append()메서드는 리스트의 가장 뒤쪽에 데이터를 삽입하고, pop()메서드는 리스트의 가장 뒤쪽에서 데이터를 꺼내기 때문이다.

 

 

 


본 포스팅은 ‘이것이 코딩 테스트다 with 파이썬’을 읽고 공부한 내용을 바탕으로 작성하였습니다.

 

 

 

작성자 : 엄코딩 eomcoding

반응형