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 | 29 | 30 |
Tags
- ISR
- 테스트코드 자동화
- fsd
- js
- 프론트엔드 아키텍처
- TC39
- 테오의스프린트
- 카카오엔터프라이즈 인턴
- 자바스크립트로 코딩테스트
- ssg
- 알고리즘
- 스토리북
- storybook styled-components
- react cypress
- 말줄임 툴팁 만들기
- 자바스크립트 동향
- storybook
- MinHeap
- 이펙티브 타입스크립트
- createPortal
- 리액트 파이버
- Next.js
- ₩1
- 2023 자바스크립트
- Queue
- msw
- next.js msw
- 알고리즘JS
- storybook 커스텀
- react-table
Archives
- Today
- Total
MEI
[JS | 알고리즘] BFS 와 0-1 BFS 본문
기본 BFS
기본 BFS는 최단 거리를 고려해줄 때 알맞는 알고리즘이다.
1 ) 로직
- 표에서 움직일 수 있는 동서남북이 필요하다
- 동서남북은 dx, dy 로 표현하게 된다.
- 2차원 배열 [1][1]을 기준으로 남쪽은 [1+1][1] (=[2][1]) 이 되는 셈이다.
추천 문제 | 1687 숨바꼭질 5014 스타트링크 10026 적록색약
0-1 BFS
기존에 있는 BFS 보다 시간복잡도가 낮아서 잘 활용한다면, 유용하게 쓸 수 있다.
0-1 BFS는 가중치를 고민해주는 방법이다. 가중치가 낮은 것(0) 은 가중치가 높은 것(1) 보다 비용 없이 이동할 수 있으니 먼저 고려해주는 것이다.
1 ) 로직 ( Queue)
- 가중치가 낮은 것은 unshift
- 가중치가 높은 것은 push
추천 문제 | 1261 알고스팟
BFS 문제 풀이 업데이트 ✨
- Queue(q)를 만들어준다.
- 동서남북으로 이동할 수 있는 dx, dy를 만들어준다.
- Q의 length 만큼 반복해준다. (Q의 length 가 1회 이동 이동을 의미한다.)
- 동서남북으로 이동하면서, 조건이 맞는지 확인한다. ( 범위를 벗어나진 않았는지, 방문했던 적은 없는지, 움직일 수 있는 공간인지) 등
원래 방문 여부를 확인하는 2차원 배열 visited를 fill(false)로 채웠는데, 유효성 검사에서 걸린다. 그래서 fill(0)으로 채워주는 것이 안전하다.
function solution(maps) {
var answer = -1;
const [n, m] = [maps.length, maps[0].length];
const [dx, dy] = [
[0, -1, 0, 1],
[-1, 0, 1, 0],
];
let q = [];
const visited = Array.from(Array(n), () => Array(m).fill(0));
q = [[0, 0]];
visited[0][0] = 1;
let L = 0;
while (q.length) {
const len = q.length;
for (let i = 0; i < len; i++) {
const [x, y] = q.shift();
if (x + 1 === n && y + 1 === m) {
return L + 1;
}
for (let j = 0; j < 4; j++) {
const [tx, ty] = [x + dx[j], y + dy[j]];
if (
tx >= 0 &&
tx < n &&
ty >= 0 &&
ty < m &&
!visited[tx][ty] &&
maps[tx][ty]
) {
q.push([tx, ty]);
visited[tx][ty] = 1;
}
}
}
L++;
}
return answer;
}
'STUDY > Algorithms' 카테고리의 다른 글
[JS] 징검다리 건너기 (0) | 2023.04.25 |
---|---|
[JS] 순위 검색 (0) | 2023.04.20 |
[JS] 교점에 별 만들기 (0) | 2023.04.07 |
JS로 알고리즘하기 (0) | 2023.03.03 |