728x90

스택이 무엇인지 정확히 모르더라도, '스택을 쌓는다' 라는 말은 흔히들 들어 보았을 것이다.

 

'스택(Stack)'은 데이터를 마치 동전을 쌓듯이, 위에서 위로 쌓아 올리는 자료구조이다.

 

쌓여있는 동전을 상상해보자, 쌓여있는 동전에서 동전을 하나 가져올때 가장 위에 올려져 있는 동전부터 가져올 수 있을것이고 가장 밑바닥에 놓여진 동전이 가장 먼저 놓여진 동전이 될 것이다.

 

스택은 이처럼 가장 늦게 들어온 데이터가 가장 먼저 나가가 되는 LIFO(Last In First Out) 형태의 자료구조이다.

 

스택을 그림으로 표현하면 다음과 같다.

 

 

 

위의 이미지에서 알 수 있듯이, 새로운 데이터가 스택에 삽입되면 5위에 올라가게 된다.

 

스택의 자료들을 사용하기 위해, 이용하는 연산은 다음과 같다.

 

  1. push(item) : 스택의 가장 위에 item을 삽입한다.
  2. pop() : 스택의 가장 위에 놓인 데이터를 뽑아서(스택에서 제거된다.) 반환한다.
  3. peek() : 스택의 가장 위에 놓인 데이터를 반환한다.(스택에서 제거되지 않는다.)
  4. isEmpty() : 스택이 비어있다면 True를, 스택이 비어있지 않다면 Fasle를 반환한다.

 

파이썬에서는 별도의 라이브러리를 사용할 필요 없이, 리스트(list)가 배열이자 스택의 역할을 한다. peek연산과 isEmpty가 메소드로 작성되어 있지는 않지만 append(item)를 통해 push를 pop()를 통해 pop을 할 수 있다.

 

'CS' 카테고리의 다른 글

BFS : 너비우선탐색  (0) 2023.09.06
728x90

너비우선탐색이 무엇인지에 알기 위해선 먼저 그래프에 대해 이해해야 한다.

그래프는 데이터를 저장하기 위한 자료구조 중 하나로, 다음과 같은 형태를 하고 있다.

데이터가 보관되는 장소를 정점(vertex, node)라고 하며 정점과 정점을 이어주는 선을 간선(edge)라고 한다.

(1,2)나 (1,3)은 간선이 존재하여 서로 연결되어 있지만, (3,4)는 간선이 존재하지 않으므로 서로 연결되어 있지 않은 것이다.

그래프를 "탐색한다" 는 것은 하나의 정점에서 모든 정점을 방문하는것을 말하며, 이를 통해 수많은 문제를 해결할 수 있다.

예를 들어, 미로의 길을 찾는다거나, 어떤곳에서 다른곳으로 이동하는 최소길이를 구한다거나 하는 등이 그 예이다.

너비우선탐색은 그래프를 탐색하기 위한 방법 중 하나로, 한 정점이 주어졌을때 주어진 정점에서 가까운 인접정점부터 방문하는것이 그 특징이다.

인접정점들을 방문하기위해 너비우선탐색은 큐(queue) 자료구조를 이용한다.

너비우선탐색의 진행과정은 다음과 같다.

1. 정점 1에서 방문한다고 가정할 때, 해당 정점을 큐에 삽입한다.

2. 큐에서 정점을 뽑은다음 방문처리한다.(visited배열에 삽입한다.) 이후 정점 1의 인접 정점인 정점 2와 정점 4를 큐에 삽입한다.

3. 큐에서 다음 정점인 2번 정점을 뽑은다음 방문처리한다. 이후 2번 정점의 인접 정점인 1번과 3번 정점을 큐에 삽입하는데, 1번 정점은 이미 방문하였던 기록이 있으므로, 삽입하지 않는다.(visited배열에 존재하므로)

4. 큐에서 다음 정점인 4번 정점을 뽑은다음 방문처리한다. 4번 정점의 인접 노드인 1번 정점은 이미 방문하였으므로, 삽입하지 않는다.

5. 큐에서 다음 정점인 3번 정점을 뽑은다음 방문처리한다. 3번 정점의 인접 정점인 1번 정점과 2번 정점은 이미 방문하였으므로 삽입하지 않는다.

6. 큐에 더 이상 데이터가 없으므로, 탐색을 종료한다. 탐색의 순서는 다음과 같다. (visited배열의 순서를 통해 알 수 있다)

다음과 같은 과정을 통해 가까운 정점부터 탐색하는 너비우선 탐색을 진행할수 있으며, 정점과 간선으로 구성되어 있다면 그래프의 형태는 어떤 형태로든 그릴 수 있다.

아래 gif를 보면 BFS에 대해 쉽게 이해할 수 있을 것이다.

https://commons.wikimedia.org/wiki/File:Breadth-First-Search-Algorithm.gif

'CS' 카테고리의 다른 글

스택에 대해 알아보자  (0) 2024.01.18

+ Recent posts