์ ํ์ ์ธ ์ต๋จ๊ฑฐ๋ฆฌ ์ฐพ๋ bfs ๋ฌธ์ ์์ต๋๋ค
์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ 2๋ฒ ์ฐพ์์ผ ํด์ ํจ์๋ฅผ ๋ง๋ค์ด์ ํ์ฉํ์ต๋๋ค
ํน์ ์ง์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ ํจ์๋ฅผ ๋ง๋ค์ด์
1. ์
๊ตฌ์์ ๋ ๋ฒ๊น์ง ๋ฐฉ๋ฌธ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ
2. ๋ ๋ฒ์์ ์ถ๊ตฌ๊น์ง ๋ฐฉ๋ฌธ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ์ต๋๋ค
function solution(maps) {
const r_length = maps.length;
const c_length = maps[0].length;
const dr=[0,0,-1,1];
const dc = [1,-1, 0,0];
let visited = Array.from(new Array(r_length), ()=> new Array(c_length).fill(false));
let q=[];
let start;
let lever;
let end;
let min_cnt=0;
//์์, ์ถ๊ตฌ, ๋ ๋ฒ ์์น ๊ตฌํ๊ธฐ
for(let r=0;r<r_length;r++){
for(let c=0;c<c_length;c++){
if(maps[r][c]==='S') start=[r, c];
if(maps[r][c]==='E') end=[r,c];
if(maps[r][c]==='L') lever=[r,c];
}
}
//์ต๋จ๊ฑฐ๋ฆฌ bfs
//์ถ๋ฐ์ง์ ์์ ๋ ๋ฒ๊น์ง ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
q.push({pos:start, cnt:0});
visited[start[0]][start[1]]=true;
//๋ ๋ฒ๊น์ง ๋๋ฌํ ์ ์์ผ๋ฉด -1
if(!find_route('L')) return -1;
//๋ ๋ฒ์์ ์ถ๊ตฌ๊น์ง ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
q.push({pos:lever, cnt:0});
visited[lever[0]][lever[1]]=true;
//์ถ๊ตฌ๊น์ง ๋๋ฌํ ์ ์์ผ๋ฉด -1
if(!find_route('E')) return -1;
function find_route(finish){
//bfs๋ก ๊ตฌํ๊ธฐ
//q๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
while(q.length){
const {pos, cnt}=q.shift();
const current_r=pos[0];
const current_c =pos[1];
//๋ชฉ์ ์ง๊น์ง ๋๋ฌํ๋ฉด min_cnt ์
๋ฐ์ดํธํ๊ณ q๋ visited ๋ฐฐ์ด ๋ค์ ์ค์
if(maps[current_r][current_c]===finish){
min_cnt+=cnt;
q=[];
visited=Array.from(new Array(r_length), ()=> new Array(c_length).fill(false));
return true;
}
for(let i=0;i<4;i++){
const next_r = current_r+dr[i];
const next_c = current_c+dc[i];
//๋ฒฝ์ด ์๋๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ํต๋ก๋ง ํ์ ๋ฃ๊ธฐ
if(next_r>=0&&
next_r<r_length&&
next_c>=0&&
next_c<c_length&&
maps[next_r][next_c]!=='X'&&
!visited[next_r][next_c]
){
q.push({pos:[next_r, next_c], cnt:cnt+1});
visited[next_r][next_c]=true;
}
}
}
return false;
}
return min_cnt;
}
'๐ง ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌด์ธ๋ ์ฌํ JS (0) | 2024.01.06 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ํธํ ๋์ค JS (1) | 2024.01.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํผ์์ ํ๋ ํฑํํ JS (1) | 2024.01.03 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋น๊ตฌ ์ฐ์ต JS (0) | 2024.01.03 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฆฌ์ฝ์ณ ๋ก๋ด JS (0) | 2024.01.03 |