๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section09 - 5 - ์†ก์•„์ง€ ์ฐพ๊ธฐ(BFS: ์ƒํƒœํŠธ๋ฆฌํƒ์ƒ‰)

by YWTechIT 2021. 10. 12.
728x90

๐Ÿ“ section09 - 5 - ์†ก์•„์ง€ ์ฐพ๊ธฐ(BFS: ์ƒํƒœํŠธ๋ฆฌํƒ์ƒ‰)

๋ฌธ์ œ: ํ˜„์ˆ˜์˜ ์œ„์น˜์™€ ์†ก์•„์ง€์˜ ์œ„์น˜๊ฐ€ ์ˆ˜์ง์„  ์ƒ์˜ ์ขŒํ‘œ ์ ์œผ๋กœ ์ฃผ์–ด์ง€๋ฉด ํ˜„์ˆ˜๋Š” ํ˜„์žฌ ์œ„์น˜์—์„œ ์†ก์•„์ง€์˜ ์œ„์น˜๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ์†ก์•„์ง€๋Š” ์›€์ง์ด์ง€ ์•Š๊ณ  ์ œ์ž๋ฆฌ์— ์žˆ๋‹ค. ํ˜„์ˆ˜๋Š” ํ•œ ๋ฒˆ์˜ ์ ํ”„๋กœ ์•ž์œผ๋กœ 1, ๋’ค๋กœ 1, ์•ž์œผ๋กœ 5๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ตœ์†Œ ๋ช‡ ๋ฒˆ์˜ ์ ํ”„๋กœ ํ˜„์ˆ˜๊ฐ€ ์†ก์•„์ง€์˜ ์œ„์น˜๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

 

BFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ, ์™œ BFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ ์ƒํƒœ ํŠธ๋ฆฌ, ๋ ˆ๋ฒจ ํŠธ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ธ DFS์ฒ˜๋Ÿผ ํ•œ level๋งŒ ๋๊นŒ์ง€ ํŒŒ๊ณ ๋“ค๋ฉฐ target๊ณผ ๋™์ผํ•  ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•œ ๋ ˆ๋ฒจ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ขŒํ‘œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  targetํ•˜๊ณ  ๋‹ค๋ฅด๋ฉด ๋‹ค์Œ ๋ ˆ๋ฒจ์„ ์‚ดํŽด๋ณด๊ณ  (๋ฌดํ•œ๋ฐ˜๋ณต..) ์ด๋Ÿฐ ์‹์œผ๋กœ ๋„“์ด ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์ด ์ง€๊ธˆ ๋ฌธ์ œ์™€ ์•Œ๋งž๋‹ค. ์—ฌ๋‹ด์œผ๋กœ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฑ์ค€1697 - ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ’€ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚˜์„œ ํ•œ๋ฒˆ ๋„์ „ํ•ด๋ณด์ž.

 

  1. BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ ˆ๋ฒจ ํƒ์ƒ‰, ์ƒํƒœ ํŠธ๋ฆฌ ํƒ์ƒ‰์„ ์ด์šฉํ•œ๋‹ค.
  2. ํ˜„์žฌ queue์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์ขŒํ‘œ(nv)๋ฅผ ๋‹ค์‹œ queue์— ๋„ฃ์„ ๋•Œ target๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด queue์—์„œ shift ํ•  ๋•Œ target์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ์‹คํ–‰์‹œ๊ฐ„์„ ์กฐ๊ธˆ์ด๋ผ๋„ ๋” ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  3. nv>0 && nv=10000์„ ํ•œ ์ด์œ ๋Š” ์ขŒํ‘œ๊ฐ€ 1๋ถ€ํ„ฐ 10000๊นŒ์ง€๋กœ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  4. visited ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด ์ด๋ฏธ ํ•œ๋ฒˆ ํƒ์ƒ‰ํ•œ ์ขŒํ‘œ๋Š” ์ƒˆ๋กœ์šด ์ขŒํ‘œ๋กœ ์ด๋™ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ์„ค์ •ํ–ˆ๋‹ค.(visited๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋˜‘๊ฐ™์€ ์ขŒํ‘œ๋กœ ์ด๋™ํ•  ๊ฒƒ์ด๊ณ  ์ด๋Š” ๋ถˆ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์œผ๋กœ ์ด์–ด์ง„๋‹ค.)
  5. ํ•˜๋‹จ์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ƒํƒœ ํŠธ๋ฆฌ ํƒ์ƒ‰์€ level์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉํ–ฅ์€ ์ƒํ•˜๊ฐ€ ์•„๋‹Œ ์ขŒ์šฐ๋กœ ์ง„ํ–‰๋œ๋‹ค.
  6. ํ•˜๋‹จ์˜ ์ฝ”๋“œ๋Š” 2๋ฒˆ ๋ฐฉ๋ฒ•์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ธ๋ฐ, ์ƒˆ๋กœ์šด ์ขŒํ‘œ๋ฅผ ๋‹ค์‹œ queue์— ๋„ฃ์„ ๋•Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์ ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

728x90

 

// ์ƒˆ๋กœ์šด ์ขŒํ‘œ์—์„œ target ํ™•์ธ
let s = 5;
let target = 14;
console.log(solution(s, target));
function solution(s, target){
let visited = Array.from({length: target+1}, () => 0);
let queue=[];
visited[s] = 1;
queue.push([s, 0]);
while(queue.length){
let [v, p] = queue.shift();
console.log(`v=${v}, p=${p}`)
for(let x of [v-1, v+1, v+5]){
if (x === target) return p+1;
if (!visited[x] && x >= 1 && x <= 10000){
visited[x]=1;
queue.push([x, p+1]);
}
}
}
}
๐Ÿ‘‰๐Ÿฝ
v=5, p=0
v=4, p=1
v=6, p=1
v=10, p=1
v=3, p=2
v=9, p=2
3

 

// queue์—์„œ ๋‚˜์ค‘์— ์ขŒํ‘œ ํ™•์ธ
let s = 5;
let position = 14;
console.log(solution(s, position));
function solution(s, position){
let visited = Array.from({length: position+1}, () => 0);
let queue=[];
visited[s] = 1;
queue.push([s, 0]);
while(queue.length){
let [v, p] = queue.shift();
console.log(`v=${v}, p=${p}`)
if (v === position) return p;
for(let x of [v-1, v+1, v+5]){
if (!visited[x] && x >= 1 && x <= 10000){
visited[x]=1;
queue.push([x, p+1]);
}
}
}
}
๐Ÿ‘‰๐Ÿฝ
v=5, p=0
v=4, p=1
v=6, p=1
v=10, p=1
v=3, p=2
v=9, p=2
v=7, p=2
v=11, p=2
v=15, p=2
v=2, p=3
v=8, p=3
v=14, p=3
3
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€