Algorithm/이것이 코딩테스트다

[이.코.테] DFS와 BFS

hammii 2021. 9. 13. 14:18
728x90
반응형

탐색이란?

많은 양의 데이터 중에서 원하는 데이터를 찾는 과정

 

자료구조란?

데이터를 표현하고 관리하고 처리하기 위한 구조

 

스택 (Stack)

  • 선입후출 (First In Last Out) / 후입선출 (Last In First Out)
  • 파이썬에서는 list 자료형을 스택으로 사용할 수 있다.
stack = []

stack.append(5)	
stack.pop()

 

큐 (Queue)

  • 선입선출 (First In First Out)
  • 파이썬에서는 deque을 사용해 큐를 구현하는 것이 가장 빠른 방법이다.
from collections import deque

queue = deque()

queue.append(5)	
queue.popleft()

 

재귀 함수란?

  • 자기 자신을 다시 호출하는 함수
  • 파이썬 인터프리터는 호출 횟수 제한이 있어서 무한대로 재귀 호출을 진행할 수 없다.

DFS

  • 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘
  • 재귀 함수를 이용한다.
  • 인접 행렬 (Adjacency Matrix) 방법은 메모리 낭비가 심하다.
  • 인접 리스트 (Adjacency List) 방법은 연결된 데이터를 하나씩 확인해야 하므로 정보를 얻는 속도가 느리다.
def dfs(graph, v, visited):
    visited[v] = True
	
    for i in graph[v]:
        if not visited[i]:
            dfs(graph, i, visited)

 

BFS

  • 그래프에서 가까운 노드부터 탐색하는 알고리즘
  • 큐 자료구조를 이용한다.
from collections import deque

def bfs(graph, start, visited):
    queue = deque([start])
    visited[start] = True

    while queue:
        v = queue.popleft()
		
        for i in graph[v]:
            if not visited[i]:
                queue.append(i)
                visited[i] = True

 

 

 

728x90
반응형