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
λ°μν
λκΈ