탐색 이란?
많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 말한다.
대표적인 그래프 탐색 알고리즘으로는 DFS와 BFS가 있다.
스택 자료구조
먼저 들어온 데이터가 나중에 나가는 형식(선입후출)의 자료구조이다.
입구와 출구가 동일한 형태로 스택을 시각화 할 수 있고, 박스를 아래에서부터 위로 차례대로 쌓고 위부터 아래로 내려놓는 방식의 박스쌓기를 생각하면 이해하기 쉽다.
DFS알고리즘에서 자주 쓰인다.
큐 자료구조
먼저 들어온 데이터가 먼저 나가는 형식(선입선출)의 자료구조이다.
양끝이 입구와 출구로 나뉘어져있다.
BFS알고리즘에서 자주 쓰인다.
재귀함수
자기자신을 다시 호출하는 함수를 의미한다.
재귀함수를 무한히 호출하면 컴퓨터 메모리를 초과하기때문에 종료조건을 반드시 명시해야한다.
DFS, BFS알고리즘에서 자주 쓰이는 방식이다.
DFS
깊이우선탐색 알고리즘으로 주로 스택을 이용하여 구현한다.
트리나 그래프에서 한 루트에서 최대한 깊숙히 들어가서 탐색하다가 인접 노드가 모두 방문되었으면 다시 돌아가 다른 루트로 탐색한다.
컴퓨터는 기본적으로 stack구조를 취하기 때문에 재귀함수로 dfs를 실행할 경우 제일 나중에 실행된 재귀함수가 가장 먼저 종료된다. 그리고 가장 처음에 호출 되었던 함수가 가장 나중에 종료되고 재귀를 최종으로 마치게된다.
BFS
넓이우선탐색 알고리즘으로 큐 자료구조를 이용하여 구현하는게 일반적이다.
그래프나 트리에서 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접노드 중 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리한다.
더이상 그 과정을 수행할 수 없을 때까지 반복한다.
BFS는 최단 거리를 구하는 문제에서 자주 쓰인다.
그림 출처 : https://gmlwjd9405.github.io/2018/08/14/algorithm-dfs.html
DFS/BFS 무료 강의
https://www.youtube.com/watch?v=7C9RgOcvkvo
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 javascript (0) | 2022.02.06 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 javascript (0) | 2022.01.25 |
[프로그래머스] 기능개발 javascript (0) | 2022.01.16 |
[프로그래머스] 124 나라의 숫자 javascript (0) | 2022.01.16 |
[프로그래머스] 오픈채팅방 javascript (0) | 2022.01.13 |