DFS와 BFS (이코테 2021)
본문 바로가기
Elice 교육/코테준비

DFS와 BFS (이코테 2021)

by willdotodo 2022. 10. 6.

그래프 탐색 알고리즘 : DFS/BFS

** 코테에서 매우 자주 등장하는 유형!

자바스크립트로 알고리즘 정리한 블로그

 

- 스택/큐 자료구조

 

스택

> 먼저 들어 온 데이터가 나중에 나가는 형식(선입후출)

> 입구와 출구가 동일한 형태. (박스쌓기 형태로 기억하면 좋음)

 

스택쌓기 예시코드 (파이썬)

자바스크립트로 구현하는 법 (push, pop을 이용)

 

 

[알고리즘/자료구조] JavaScript 스택(Stack) 구현하기

스택은 자료구조형에 속한다.먼저 들어간 자료가 나중에 나오는 후입선출 자료구조로, LIFO(Last In First Out)라고도 부른다.데이터를 입력하는 push()와 데이터를 제거하는 pop() 등의 작업을 할 수 있

velog.io

stack = []
#삽입(5) - 삽입(2) - 삽입(3)- 삭제 
stack.append(5)
stack.append(2)
stack.append(3)
stack.pop()

print(stack[::-1] #최상단 원소부터 출력 > 실행결과: 2,5
print(stack) #최하단 원소부터 출력

- 먼저들어온 데이터가 먼저 나가는 형식(선입선출)

- 입구와 출구가 모두 뚫려 있는 터널 같은 형태로 

 

큐 구현예제(C++)

참고) 자바스크립트에서 Queue를 독립적으로 자체 제공하지는 않지만 배열(Array)를 이용하여 큐의 기능을 흉내낼 수 있다. (ㅎ...) 흉내내는 법

#include <bits/stdc++.h>
using namespace std;

que<int> q;

int main (void) {
q.push(5);
q.push(2);
q.push(3);
q.pop();

//먼저 들어온 원소부터 추출
while (!q.empty()){
cout << q.front() << ' ';
q.pop();
}
}

front 메서드는 que에 들어온 원소 중에서 앞쪽에 원소부터 추출하게 만드는 메서드

 

재귀함수

- 재귀함수는 자기자신을 다시 호출하는 함수를 의미.

- 재귀 깊이 제한을 걸어둘 수도 있음.

>> 재귀함수를 문제 풀이에서 사용할 때는 재귀함수의 종료 조건을 *반드시 명시해야 함*

-재귀와 반복문의 다른점? > 재귀함수는 return 값에서 자기 자신을 부른다는 것.

>> 장점 - 반복문보다 간결하게 작성 가능. but 반복문보다 불리한 경우도 있음.

>>스택은 스택프레임이 쌓이기 때문에 스택 라이브러리 대신 재귀함수 이용 많이 함.

예시들

 

DFS

-깊이 우선 탐색. 깊은 부분을 우선적으로 탐색

-스택 or 재귀함수 이용.

-인접 노드를 따라가서 더이상 인접 노드가 없을 때까지 가다가(깊게) 올라와서 인접노드로 가는

 

BFS

- 너비우선탐색

- 가까운 노드부터 우선적으로 탐색하는 알고리즘

- 큐 자료구조를 이용함.

 

BFS & DFS 구현 블로그

 

[JS] BFS, DFS

원래 c++로 알고리즘을 공부하다가 웹 프론트엔드만 주구장창 하다보니 Javascript가 익숙해서 알고리즘 언어를 바꿨다..c++로 BFS, DFS 처음 이해 할 때 복잡했었는데 Javascript로 BFS, DFS를 구현해보니

velog.io

 

* 문제를 보고 어떤 알고리즘을 써야하는지 생각하기

- 아이스크림 > 연결요소 찾기 > DFS or BFS 로 연결 요소를 찾는 것 > 그래프 형태로 모델링해서 찾을 수 있으므로. > 특정 지점에서 연결된 모든 노드를 방문처리

- 간선의 길이가 같을 때 최단거리구하기 : BFS

 

댓글