728x90
π section09 - 6 - μ¬λλΌ μμΌλλ(BFS, DFS)
λ¬Έμ : N*Nμ μ¬λλΌ μμΌλλμ μ§λκ° κ²©μνμ μ λ³΄λ‘ μ£Όμ΄μ§λλ€. κ° μ¬μ 1λ‘ νμλμ΄ μνμ’μ°μ λκ°μ μΌλ‘ μ°κ²°λμ΄ μμΌλ©°, 0μ λ°λ€μ λλ€. μ¬λλΌ μμΌλλμ λͺ κ°μ μ¬μ΄ μλμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
μ΄ λ¬Έμ λ DFS
μ BFS
νμμΌλ‘ λͺ¨λ ν μ μλ λ¬Έμ λ€. μ΄ λ°©λ²μ μ΄μ©νλ©΄ λ°±μ€4963 - μ¬μ κ°μλ νλ² νμ΄λ³΄μ! λ¨Όμ , DFS
λ‘ νΈλ λ°©λ²μ μμ보μ.
visited
λ°°μ΄μ μ μΈνμ§ μκ³ νμ¬ μ’νλ₯Ό 0μΌλ‘ λ§λ λ€μμ λκ°μ μ’νμ κ°μ΄ 1μΈ κ³³λ§ νμνλ€.(μ΄λ, μ¬κ·μ μΌλ‘dfs
ν¨μλ₯Ό νΈμΆνλ€.)board
λ₯Ό λλ©΄μ νμ¬ μ’νμ λκ°μ μ’νκΉμ§ 0μ΄λ©΄ λ μ΄μ νμν μ μμΌλ―λ‘ λ€μ μ’νλ‘ λμ΄κ°λ€. λμ΄κ° λcnt
μ¦κ°
// DFS
let n = 7;
let arr = [
[1, 1, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 1, 1, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 1, 1],
[1, 1, 0, 1, 1, 0, 0],
[1, 0, 0, 0, 1, 0, 0],
[1, 0, 1, 0, 1, 0, 0],
];
console.log(solution(n, arr));
function solution(n, arr){
let dx = [-1, -1, 0, 1, 1, 1, 0, -1];
let dy = [0, 1, 1, 1, 0, -1, -1, -1];
let cnt=0;
function dfs(x, y){
console.log(`x=${x}, y=${y}`)
arr[x][y]=0;
for(let i=0; i<8; i++){
let nx=x+dx[i];
let ny=y+dy[i];
if(nx<0 || ny<0 || nx>=n || ny>=n) continue;
if(arr[nx][ny]) dfs(nx, ny);
}
}
for(let x=0; x<n; x++){
for(let y=0; y<n; y++){
if (arr[x][y]){
dfs(x, y);
cnt++;
}
}
}
return cnt;
}
ππ½ 5
728x90
λ€μμΌλ‘, BFS
λ‘ νΈλ λ°©λ²μ μμ보μ.
visited
λ°°μ΄μ μ μΈνμ§ μκ³ νμ¬ μ’νλ₯Ό 0μΌλ‘ λ§λ λ€μμ λκ°μ μ’νμ κ°μ΄ 1μΈ κ³³λ§ νμνλ€. λκ°μ μ’νκ° 1μ΄λ©΄queue
μ λ£λλ€.queue
κ°μ΄shift
λ λ λ λκ°μ μ’νλ₯Ό μ΄ν΄λ³Έλ€. λκ°μ μ’νκ° 1μ΄λ©΄queue
μ λ£κ³ 0μ΄λ©΄ continueνλ€.board
λ₯Ό λλ©΄μ νμ¬ μ’νμ λκ°μ μ’νκΉμ§ 0μ΄λ©΄ λ μ΄μ νμν μ μμΌλ―λ‘ λ€μ μ’νλ‘ λμ΄κ°λ€. λμ΄κ° λcnt
μ¦κ°
// BFS
let n = 7;
let arr = [
[1, 1, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 1, 1, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 1, 1],
[1, 1, 0, 1, 1, 0, 0],
[1, 0, 0, 0, 1, 0, 0],
[1, 0, 1, 0, 1, 0, 0],
];
console.log(solution(n, arr));
function solution(n, arr){
let dx = [-1, -1, 0, 1, 1, 1, 0, -1];
let dy = [0, 1, 1, 1, 0, -1, -1, -1];
let cnt=0;
let queue=[];
function bfs(x, y){
arr[x][y]=0;
queue.push([x, y]);
while(queue.length){
let [x, y] = queue.shift();
console.log(`x=${x}, y=${y}`)
for(let i=0; i<8; i++){
let nx=x+dx[i];
let ny=y+dy[i];
if(nx<0 || ny<0 || nx>=n || ny>=n) continue;
if(arr[nx][ny]){
arr[nx][ny]=0;
queue.push([nx, ny])
}
}
}
}
for(let x=0; x<n; x++){
for(let y=0; y<n; y++){
if (arr[x][y]){
bfs(x, y);
cnt++;
}
}
}
return cnt;
}
ππ½ 5
λ°μν
λκΈ