Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 프로그래머스
- 프로그래머스자바
- 백준팩토리얼
- 프로그래머스N으로표현
- 코딩연습
- 백준팩토리얼자바
- 백준
- 백준벌집
- 백준하노이탑
- 프로그래머스완주하지못한선수
- 인텔리제이단축키
- 카카오코딩연습
- 프로그래머스JAVA
- springboot
- 알고리즘공부
- 인텔리제이테스트클래스생성
- 자바
- 프로그래머스해쉬
- 프로그래머스전화번호목록
- 백준피보나치
- 전화번호목록자바
- 알고리즘
- 백준피보나치수
- intelliJ단축키
- java
- C++
- 완전탐색
- dfs
- 스프링부트와 AWS로혼자구현하는웹서비스
- 테스트클래스생성단축키
Archives
- Today
- Total
말랑말랑
BFS 알고리즘 공부 본문
알고리즘 이론을 정말 정말 오랜만에 다시 공부해보면서 첫번째로 그동안 부족하다고 느꼈던 탐색쪽을 공부했다.
BFS(너비 우선 탐색)
- 그래프 이론이자 완전탐색 방법 중 하나이다.
- BFS은 너비 우선 탐색으로 가까운 노드를 우선적으로 방문하고 탐색한다.
- 그래프에서 인접하게 연결된 노드부터 쭉 방문한 후 그 다음으로 인접된 노드들을 순차적으로 방문하는 방식이다.
- 뎁스가 낮은(가까운) 노드부터 쭉 방문한 후 뎁스를 높여가는게 특징.
- Queue의 구조를 사용하는 방식
- 최단 거리 찾기와 같은 문제에서 자주 나온다고 한다.
* 이론 공부는 youtu.be/CJiF-muKz30 을 참고했다. 설명을 쉽게 잘 해주신다.
Queue를 사용한 BFS
int[][] graph = {
{},
{2, 3, 8},
{1, 7},
{1, 4, 5},
{3, 5},
{3, 4},
{7},
{2,6,8},
{1, 7}
};
boolean[] visited = new boolean[graph.length];
Queue<Integer> que = new LinkedList<Integer>();
int num = 1;
que.add(num); // 방문했다는 의미로 추가
visited[num] = true;
while(!que.isEmpty()) { // while을 사용한 이유 : 배열의 원소를 순차적으로 방문하는 for문이 적합하지 않음. 모두 방문했다는 조건이 만족할 때 반복을 종료할것이므로 while을 사용
num = que.poll(); // 첫번째 원소 빼기. 이 원소의 연결 노드를 다시 큐에 담을거임
System.out.println(num); // 방문했당.
for(int i=0 ; i<graph[num].length ; i++) { // 연결된 노드를 순차적으로 큐에 추가
int linkNode = graph[num][i];
if(visited[linkNode] == false) { // 연결 된 노드가 아직 방문하지 않았고, 방문계획이 없으면
que.offer(linkNode); // 큐에 추가
visited[linkNode] = true; // 방문했음
}
}
}
'알고리즘' 카테고리의 다른 글
DFS 알고리즘 공부 (0) | 2021.04.09 |
---|
Comments