๐Ÿ’ป BFS/DFS by ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์—ฐ์Šต๋ฌธ์ œ

waterglassesยท2022๋…„ 3์›” 26์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
6/50
post-thumbnail

๋‹ค์Œ์ฃผ์— ๋ฐ”๋‹๋ผJS๋ฅผ ํ•™์Šตํ•˜๋Š”๋ฐ ๋‚˜๋Š” ๋ฐ”๋‹๋ผJS๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•„์„œ ๋ฏธ๋ฆฌ ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค์Œ์ฃผ์— ํ•™์Šตํ•  BFS/DFS ์— ๋Œ€ํ•ด์„œ ๋ฏธ๋ฆฌ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๐Ÿ“ BFS / DFS

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)

  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ฐ™์€ ๊นŠ์ด์— ํ•ด๋‹นํ•˜๋Š” ์ •์ ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„
  • ์‹œ์ž‘ ์ง€์ ๋ถ€ํ„ฐ ๊ฐ€๊นŒ์šด ์ •์ ๋ถ€ํ„ฐ ํƒ์ƒ‰

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)

  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ตœ๋Œ€ํ•œ ๊นŠ์€ ์ •์ ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • stack์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„
  • ์‹œ์ž‘ ์ •์ ์—์„œ ๊นŠ์€ ๊ณณ๋ถ€ํ„ฐ ํƒ์ƒ‰

์—ฌํ–‰๊ฒฝ๋กœ

์ถœ์ฒ˜ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
์—ฌํ–‰ ๊ฒฝ๋กœ

๋‚ด ๋‹ต์•ˆ

function solution(tickets) {
  const airportMap = new Map();
  for (const [start, dest] of tickets) {
    if (!airportMap.has(start)) {
      airportMap.set(start, [dest]);
    } else {
      airportMap.get(start).push(dest);
    }
  }

  for (const [start, dest] of airportMap.entries()) {
    dest.sort().reverse();
  }

  const travelRoutes = [];
  const stack = ["ICN"];
  while (stack.length) {
    const city = stack[stack.length - 1];

    if (!airportMap.has(city) || airportMap.get(city).length === 0) {
      travelRoutes.push(stack.pop());
    } else {
      stack.push(airportMap.get(city).pop());
    }
  }
  return travelRoutes.reverse();
}

๐Ÿ’ก๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  1. airportMap๋ฅผ Map์œผ๋กœ ์„ ์–ธํ•˜์—ฌ key์—๋Š” ์ถœ๋ฐœํ•˜๋Š” ๊ณตํ•ญ์„, value ๋Š” ๋„์ฐฉํ•˜๋Š” ๊ณตํ•ญ๋“ค์„ ์ดˆ๊ธฐํ™”์‹œ์ผœ์ค€๋‹ค.
  2. ๊ฒฝ๋กœ๊ฐ€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ์ ์ง€๋ฅผ ์ •๋ ฌํ•ด์ค€๋‹ค.
  3. stack์œผ๋กœ DFS๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋Š”๋ฐ ์šฐ์„  "ICN"๋ถ€ํ„ฐ ์ถ”๊ฐ€ํ•ด ๋†“๋Š”๋‹ค.
  4. airportMap์— ๋„์‹œ(๊ณตํ•ญ)์ด ์—†๊ฑฐ๋‚˜ ๋„์‹œ๋กœ๋ถ€ํ„ฐ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ณตํ•ญ์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” travelRoutes(์—ฌํ–‰๊ฒฝ๋กœ)์— ์ถ”๊ฐ€ํ•ด ์ฃผ๊ณ  ์•„๋‹ ๋•Œ์—๋Š” ์Šคํƒ์— ๋‹ค์Œ ๊ฐˆ ๊ณตํ•ญ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๐Ÿ”ฅ ๋Š๋‚€์ (์˜ค๋Š˜์˜ ํšŒ๊ณ )

์˜ค๋Š˜์€ ํ•˜๋ฃจ์ข…์ผ ๋Œ€๋ถ€๋ถ„ ๊ณผ์ œ์— ๋งค์ง„ํ•˜์˜€๋‹ค. ํŠธ๋ฆฌ์˜ ์ˆœํšŒ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„, ๊ทธ๋ฆฌ๊ณ  ํŠธ๋ผ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž๋™์™„์„ฑ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์•„์ง PR์„ ์˜ฌ๋ฆฌ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์Šค์Šค๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ๊ฒƒ์— ์นญ์ฐฌํ•ด์ฃผ๊ณ  ์‹ถ๋‹ค. ๋ฌผ๋ก  ๊ตฌํ˜„ ๋ชปํ•œ ๋ถ€๋ถ„(์Šคํƒ์œผ๋กœ ๊ตฌํ˜„ํ•œ ํ›„์œ„ ์ˆœํšŒ)๋„ ์žˆ๋‹ค..๐Ÿ˜‚ ์ด ๋ถ€๋ถ„์€ ๋‚˜์ค‘์— ๋”ฐ๋กœ ์ •๋ฆฌํ•ด๋‘ฌ์•ผ์ง€

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์ฃผ๋ถ€ํ„ฐ ๋ฐ”๋‹๋ผJS๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. ํ•œ๋ฒˆ๋„ ์ด๊ฒƒ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ์ ์ด ์—†์–ด์„œ ๊ฑฑ์ •๋œ๋‹ค. ๋ฏธ๋ฆฌ ํ•œ ๋ฒˆ ๋ณด๊ณ  ์™”์ง€๋งŒ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์กฐ๊ธˆ ๋ฒ…์ฐจ์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค. ๋ญ ์–ด์ฉŒ๊ฒ ์–ด~ ์‹œ๊ฐ„์„ ๋” ํˆฌ์žํ•ด์•ผ์ง€! ๊ทธ๋Ÿฌ๋‹ˆ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ๊ฐ•์˜๋ฅผ ๋“ค์–ด๋‘์ž

์ƒˆ๋กญ๊ฒŒ ๋Š๋‚€ ๊ฒƒ๋„ ์žˆ๋Š”๋ฐ ์ฒด๋ ฅ๊ด€๋ฆฌ๋ฅผ ์ž˜ ํ•ด์•ผ ๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.๐Ÿ’ช๐Ÿป๐Ÿ’ช๐Ÿป ๊ณ„์† ์ปดํ“จํ„ฐ ์•ž์— ์•‰์•„์žˆ๊ณ  ์šด๋™๋„ ๊ฑฐ์˜ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชธ์˜ ์ปจ๋””์…˜์ด ์•ˆ์ข‹์•„์ง€๋Š”๊ฒŒ ์กฐ๊ธˆ ๋Š๊ปด์ง„๋‹ค.๐Ÿ˜ฉ
์ด๋ž˜์„œ ์šด๋™์ด ์ค‘์š”ํ•œ๊ฑด๊ฐ€..๐Ÿ˜ญ PT๋ฅผ ๋Š์–ด์•ผํ• ๊นŒ..? ๊ณ ๋ฏผํ•ด๋ณด์ž!
๋˜ํ•œ ํ”ผ๊ณคํ•ด๋„ ์ƒˆ๋ฒฝ 2์‹œ-3์‹œ ์•ˆ์—๋Š” ์ž๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค!

Refer

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์˜ค๋Š˜์˜ ๋‚ด์šฉ ์ •๋ฆฌ

๋ฐ๋ธŒ์ฝ”์Šค ์ฃผ๋ง

profile
๋งค ์ˆœ๊ฐ„ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€