https://school.programmers.co.kr/learn/courses/30/lessons/87694
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 3 ๋ฌธ์ ์ด๋ค
์ฒ์์ ์ผ๋ถ ํ ์ผ๊ฐ ๊ณ์ ํ๋ ค์ ์ฝ์งํ์๋๋ฐ
์๊ณ ๋ณด๋ map ๋ณ์๋ฅผ ์ฑ์ฐ๋ ๊ฒ ๋ฌธ์ ์๋ค.... (์ด๊ฑฐ ํ๋๋๋ฌธ์ ๋ช ์๊ฐ์ ์์)
js์์๋ ๋ฐฐ์ด ๊ฐ์ ์ง์ ๋ฐ๊ฟ๋ ์ค๋ณต์ด ๋๋ฉด ๋ญ๊ฐ ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ณด๋ค
์ค๋ณต, ๋ฎ์ด์ฐ๊ธฐ ์ต๋ํ ์๋๋ก ์ง๊ธฐ!
Main Idea => ๋งต์ ๋ ๋ฐฐ๋ก ๋๋ ค์, ใท์๋ก ์ฐํํด์ผํ๋๋ฐ ์งํํ๊ฒ ๋๋ ๋ถ๋ถ์ด ์๋๋ก ํจ
๊ทธ๋ฆฌ๊ณ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋, BFS๋ก ํผ๋ค!
๋์ ํ์ด
let dx = [0, 1, 0, -1];
let dy = [1, 0, -1, 0];
let map = new Array(101).fill(null).map(() => new Array(101).fill(0));
let visited = new Array(101).fill(null).map(() => new Array(101).fill(0));
function canVisit(nx, ny) {
if (nx < 0 || nx > 100 || ny < 0 || ny > 100) return false;
if (map[nx][ny] !== 1) return false;
if (visited[nx][ny] === 1) return false;
return true;
}
function bfs(x, y, itemX, itemY) {
let q = [[x, y, 0]];
visited[x][y] = 1;
while (q.length !== 0) {
let [cx, cy, cnt] = q.shift();
if (cx === itemX && cy === itemY) return cnt / 2;
for (let i = 0; i < 4; ++i) {
let nx = cx + dx[i];
let ny = cy + dy[i];
if (canVisit(nx, ny)) {
q.push([nx, ny, cnt + 1]);
visited[nx][ny] = 1;
}
}
}
return -1;
}
function solution(rectangle, characterX, characterY, itemX, itemY) {
let answer = 0;
let doubleRec = rectangle.map(rec => rec.map (point => point*2));
doubleRec.forEach(([x1,y1,x2,y2])=>{
for(let i=x1;i<=x2;i++){
for(let j=y1;j<=y2;j++){
if(i === x1 || i === x2 || j === y1 || j === y2){
if(map[i][j]===0){map[i][j]=1;}
}
else{map[i][j]=2;}
}
}
});
answer = bfs(characterX*2, characterY*2, itemX*2, itemY*2);
return answer;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript/PGS] Lv.2 : ํผ๋ณด๋์น ์ (1) | 2025.02.19 |
---|---|
[Javascript/PGS] Lv.3 : ๊ธฐ์ง๊ตญ ์ค์น (0) | 2025.02.18 |
[Javascript/PGS] Lv.2 : ์กฐ์ด์คํฑ (Greedy) ๐ฎ๐ฅ (1) | 2025.02.16 |
[Javascript/PGS] Lv.0 : ๋ค์์ ์ฌ ์ซ์ (์ ๋ฌธ 100์ ๋ง์คํฐ!๐ฅ) (0) | 2025.02.11 |
[Javascript/PGS] Lv.0 : ์ด์ง์ ๋ํ๊ธฐ (0) | 2025.02.11 |