π 05 - μ‘μμ§ μ°ΎκΈ°(BFS : μλνΈλ¦¬νμ)
νμλ μ‘μμ§λ₯Ό μμ΄λ²λ Έλ€. λ€νν μ‘μμ§μλ μμΉμΆμ κΈ°κ° λ¬λ € μλ€. νμμ μμΉμ μ‘μμ§μ μμΉκ° μμ§μ μμ μ’ν μ μΌλ‘ μ£Όμ΄μ§λ©΄ νμλ νμ¬ μμΉμμ μ‘μμ§μ μμΉκΉμ§ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ μ΄λνλ€. μ‘μμ§λ μμ§μ΄μ§ μκ³ μ μ리μ μλ€.
νμλ μ€μΉ΄μ΄ 콩콩μ νκ³ κ°λλ° ν λ²μ μ νλ‘ μμΌλ‘ 1, λ€λ‘ 1, μμΌλ‘ 5λ₯Ό μ΄λν μ μλ€. μ΅μ λͺ λ²μ μ νλ‘ νμκ° μ‘μμ§μ μμΉκΉμ§ κ° μ μλμ§ κ΅¬νλ λ¬Έμ μ΄λ€.
π μ
λ ₯μ€λͺ
첫 λ²μ§Έ μ€μ νμμ μμΉ Sμ μ‘μμ§μ μμΉ Eκ° μ£Όμ΄μ§λ€. μ§μ μ μ’ν μ μ 1λΆν° 10,000κΉμ§μ΄λ€.
π μΆλ ₯μ€λͺ
μ νμ μ΅μνμλ₯Ό ꡬνλ€. λ΅μ 1 μ΄μμ΄λ€.
λ¬Έμ λ₯Ό ν΄μνλ©΄ νμμ μμΉ(μΆλ° μ§μ )μμ μ‘μμ§μ μμΉ(λμ°©μ§μ )κΉμ§μ μ΅λ¨ 거리λ₯Ό ꡬνλ λ¬Έμ μ΄λ€. μ¦, λ λ Έλ μ¬μ΄μ μ΅λ¨ κ²½λ‘λ₯Ό ꡬνλ λ¬Έμ μ΄λ―λ‘ λμ΄ μ°μ νμ(BFS)μΌλ‘ νμνλ κ²μ΄ μ’λ€.
μ¬λ¬ κ°λ μ€ λ¬΄νν κΈΈμ΄λ₯Ό κ°μ§λ κ²½λ‘κ° μ‘΄μ¬νκ³ νμ λͺ©νκ° λ€λ₯Έ κ²½λ‘μ μ‘΄μ¬νλ κ²½μ° κΉμ΄ μ°μ νμ(DFS)μΌλ‘ νμν μμλ 무νν κΈΈμ΄μ κ²½λ‘μμ μμν μ’ λ£νμ§ λͺ»νμ§λ§, λμ΄ μ°μ νμ(BFS)μ κ²½μ°λ λͺ¨λ κ²½λ‘λ₯Ό λμμ μ§ννκΈ° λλ¬Έμ νμμ΄ κ°λ₯νλ€λ νΉμ§μ΄ μλ€.
π νμ΄ λ°©λ²
μ΄μ§νΈλ¦¬ λμ΄μ°μ νμ(BFS)μ κ³Όμ μ λ¨Όμ μ΄ν΄νκ³ μ€λ©΄ μ’λ€.
λ¬Έμ νμ΄ λ°©λ²μλ 2κ°μ§κ° μλλ° λ λ²μ§Έ λ°©λ²μ κ²½μ° νΈλ¦¬μ λ 벨μ μ΄μ©ν λ°©λ²μ΄λ€. 첫 λ²μ§Έ λ°©λ²μΌλ‘ μ΄ν΄λ₯Ό ν ν λ λ²μ§Έ λ°©λ²λ μ°Έκ³ ν΄μ 보면 λλ€.
x - νμ¬ μ’ν, nx - λ€μμ μ΄λν μ’ν, ch[x] - νμ¬ μ’νμ μ€κΈ°κΉμ§ λͺ λ² μμ§μλμ§μ λν κ°μ΄ μ μ₯
- nxκ° μ‘μμ§μ μ’νμ κ°λ€λ©΄ ch[x]μ + 1μ return νλ€.
- nxκ° μ‘μμ§μ μ’νμ κ°μ§ μλ€λ©΄ nxκ° μ’νμμ λ²μ΄λμ§ μλμ§, μ΄λν μ μ΄ μλ μ’νμΈμ§ νμΈν ν 쑰건μ μ ν©νλ©΄ νμ nxλ₯Ό μΆκ°νλ€. (μ΄λν μ μ΄ μλ μ’νλ‘ μ΄λνλ©΄ μ΅λ¨ κ²½λ‘κ° μλ)
// νμ¬ μ’νμ μ€κΈ°κΉμ§ λͺ λ² μμ§μλμ§μ λν κ°μ μ μ₯νλ λ°©λ²
function solution(s, e) {
let answer = 0;
const queue = [];
const ch = Array.from({ length: 10001 }, () => 0);
queue.push(s);
while (queue.length) {
const x = queue.shift();
for (let nx of [x - 1, x + 1, x + 5]) {
if (nx === e) return ch[x] + 1;
if (nx > 0 && nx <= 10000 && ch[nx] === 0) {
queue.push(nx);
ch[nx] = ch[x] + 1;
}
}
}
return answer;
}
console.log(solution(8, 3));
// νΈλ¦¬μ λ 벨μ μ΄μ©ν λ°©λ²
function solution(s, e) {
let answer = 0;
let ch = Array.from({ length: 10001 }, () => 0);
let queue = [];
queue.push(s);
ch[s] = 1;
let L = 0;
while (queue.length) {
let len = queue.length;
for (let i = 0; i < len; i++) {
let x = queue.shift();
for (let nx of [x - 1, x + 1, x + 5]) {
if (nx === e) return L + 1;
if (nx > 0 && nx <= 10000 && ch[nx] === 0) {
ch[nx] = 1;
queue.push(nx);
}
}
}
L++;
}
return answer;
}
console.log(solution(5, 14));
'Algorithm > μΈνλ°(inflearn)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript/section 9] 07 - μ¬λλΌ μμΌλλ(BFS) (0) | 2022.11.28 |
---|---|
[JavaScript/section 9] 06 - μ¬λλΌ μμΌλλ(DFS) (0) | 2022.11.24 |
[JavaScript/section 9] 04 - μ΄μ§νΈλ¦¬ λμ΄μ°μ νμ(BFS) (0) | 2022.11.21 |
[JavaScript/section 9] 03 - λ―Έλ‘ νμ (0) | 2022.11.20 |
[JavaScript/section 9] 02 - κ²½λ‘ νμ(μΈμ 리μ€νΈ) (0) | 2022.11.16 |