๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ JS

[๋ฐฑ์ค€] node.js/ 2606_๋ฐ”์ด๋Ÿฌ์Šค

by Tamii 2021. 11. 7.
๋ฐ˜์‘ํ˜•

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์‰ฝ์ง€ ์•Š์•˜๋‹ค.

dfs๋ฅผ ์ด์šฉํ•ด ํ’€์ดํ•˜๋Š” ๋ฌธ์ œ์˜€๊ณ , ๋‚˜๋Š” dfs์— ์•„์ง ์•ฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์ด ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹คใ….

 

 

 

์ •๋‹ต ํ’€์ด

n+1์„ ํ•˜๋Š” ์ด์œ ๋Š” ์ธ๋ฑ์Šค์™€ ์ˆ˜๋ฅผ ๋งž์ถฐ์ฃผ๊ธฐ ์œ„ํ•ด์„œ! ( 0 idx์˜ ๊ฐ’์€ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.)

const fs = require('fs');

let input = (fs.readFileSync('./dev/stdin') + '').toString().trim().split('\n');
let n = Number(input.shift());
let m = Number(input.shift());

let graph = [...new Array(n + 1)].map(() => []);
let visited = new Array(n + 1).fill(false);
let ans = 0;

visited[1] = true;

const dfs = (start) => {
  graph[start].map((dest) => {
    if (!visited[dest]) {
      visited[dest] = true;
      ans += 1;
      dfs(dest);
    }
  });
};


input.map((i) => {
  const [start, dest] = i.split(' ').map((ele) => Number(ele));
  graph[start].push(dest);
  graph[dest].push(start);
});

dfs(1);

console.log(ans);

1) ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  graph ์ƒ์„ฑ

2) ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ‘œํ˜„ํ•  visited ๋ฐฐ์—ด์ƒ์„ฑ

3) dfs ์ƒ์„ฑ : dfs๋Š”

- ๊ทธ๋ž˜ํ”„ ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ ํ•ด๋‹น graph๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„

- ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ทธ ์ˆซ์ž์˜ graph๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธ 

4) dfs๋กœ graph๋ฅผ ๋Œ๋ฉฐ ๋“ค์–ด์™”๋˜ ๊ณณ ๋‚˜๊ฐ”๋˜ ๊ณณ์„ ๋‘˜๋‹ค ๋ฐฉ๋ฌธํ•ด๋ด„!

 

 

 

input map์—์„œ console์„์ฐ์–ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ graph๊ฐ€ ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

 

ํ•œ๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด graph๊ฐ€ ๋‹ค ์ฑ„์›Œ์ง„ ํ›„์— dfs๊ฐ€ ์‹œ์ž‘๋˜๊ฒŒ ๋˜๋Š”๋ฐ,

 

dfs ํ˜ธ์ถœ graph visited
dfs(1) [2,5] [
  false, true,
  false, false,
  false, false,
  false, false
]
dfs(2) [1,3,5] 1์€ ๋ฐฉ๋ฌธํ•จ
[1,3,5]
[
  false, true,
  true, false,
  false, false,
  false, false
]
dfs(3) [2] 2๋Š” ๋ฐฉ๋ฌธํ•จ
๋‹ค์‹œ ์œ„์˜ dfs(2)๋กœ ์žฌ๊ท€
[
  false, true,
  true, true,
  false, false,
  false, false
]
dfs(5) [1,3,5] 1์€ ๋ฐฉ๋ฌธํ•จ
[1,3,5]
[1,3,5]
[
  false, true,
  truetrue,
  false, true,
  false, false
]

...

 

 

์ด๋Ÿฐ ์‹์œผ๋กœ dfs๋ฅผ ๋ถ€๋ฅด๊ณ  ๋‹ค์‹œ ์žฌ๊ท€ํ•˜๊ณ  ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์—ฐ๊ฒฐ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฐ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ด ๊ณผ์ •์—์„œ ๋‚˜๋Š” ์ฒ˜์Œ์— ํฐ ์‹ค์ˆ˜๋ฅผ ํ•ด์„œ ์‚ฝ์งˆ์„ ์˜ค๋ž˜ ํ–ˆ๋‹ค.

graph๋ฅผ ์ƒ์„ฑํ•  ๋‹น์‹œ ๋‚˜๋Š” ์•„๋ฌด ์ƒ๊ฐ ์—†์ด graph2์™€ ๊ฐ™์ด ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, 

let graph = [...new Array(n + 1)].map(() => []);
// [ [],[],[] ]

let graph2 = new Array(n + 1).fill([]);
// [ [],[],[] ]

๋ฐ”๋กœ graph2์™€ ๊ฐ™์ด ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด graph2์˜ ๋ชจ๋“  element( ์ฆ‰ ๋ฐฐ์—ด[])๋“ค์ด ๊ทธ ๊ฐ’์„ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์„œ

graph๊ฐ€ ๊ณ„์† ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค..

๋”ฐ๋ผ์„œ graph์™€ ๊ฐ™์ด ๊ฐ’์„ ๋”ฐ๋กœ ๋งŒ๋“ ํ›„์— map์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

[...new Array(n)] 
// [ undefined, undefined, undefined ]

[...new Array(n)].map((ele)=>[]))
// [ [],[],[] ]
// graph

[
  [], [ 2 ], [ 1 ],
  [], [],    [],
  [], []
]


// graph2
[
  [ 2, 1 ], [ 2, 1 ],
  [ 2, 1 ], [ 2, 1 ],
  [ 2, 1 ], [ 2, 1 ],
  [ 2, 1 ], [ 2, 1 ]
]

 

๋Œ“๊ธ€