์ด๋ฒ ๋ฌธ์ ๋ ์ฝ์ง ์์๋ค.
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, true, true, 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 ]
]
'๐ ์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] node.js/ 1463_1๋ก ๋ง๋ค๊ธฐ (2) | 2021.10.27 |
---|---|
๋ฐฑ์ค] node.js/ 1448_ ์ผ๊ฐํ ๋ง๋ค๊ธฐ (0) | 2021.10.23 |
[๋ฐฑ์ค] node.js/ 1748_ ์ ์ด์ด์ฐ๊ธฐ(1) (0) | 2021.10.22 |
[๋ฐฑ์ค] node.js/ 15650 N๊ณผM(2) (0) | 2021.10.21 |
[๋ฐฑ์ค] node.js/ 15649 N๊ณผ M 1 (0) | 2021.10.20 |
๋๊ธ