๐ 02 - ๊ฒฝ๋ก ํ์(์ธ์ ๋ฆฌ์คํธ)
๋ฐฉํฅ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๋ชจ๋ ๊ฒฝ๋ก์ ๊ฐ์ง ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์. ์๋ ๊ทธ๋ํ์์ 1๋ฒ ์ ์ ์์ 5๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๊ฐ์ง ์๋ ์ด 6๊ฐ์ง ์ ๋๋ค.
์ด์ ๋ฌธ์ ์ ๊ฐ์ ๋ฌธ์ ์ด์ง๋ง ์ธ์ ํ๋ ฌ์ด ์๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด๋ณด๋ ค๊ณ ํ๋ค. ์ ์ ์ด ์ ๋ค๋ฉด ์ธ์ ํ๋ ฌ๋ก ํ์ด๋ ๋์ง๋ง ๋ฌด์ํ ๋ง๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น, ์๊ฐ ๋ณต์ก๋ ์ฆ๊ฐ์ ๊ฐ์ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค. ๐ฉ๐ฉ
์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ด ์กด์ฌํ๋ค.
v ์ ์ (ํ)์์ ์ด๋ ๊ฐ๋ฅํ ์ ์ ์ ๊ฐ๊ฐ ๋ฐฐ์ด์ ์ถ๊ฐํ๋ค.
๐ ํ์ด ๋ฐฉ๋ฒ
v - ํ์ฌ ์ ์ , i - ๋ฐฐ์ด์ ์ธ๋ฑ์ค, ch - ํด๋น ์ ์ ์ ์ง๋ฌ๋์ง ์ฒดํฌํ๋ ๋ฐฐ์ด
graph[v][i] - ํ์ฌ ์ ์ ์์ ์ด๋ํ ์ ์๋ ์ ์ ์ผ๋ก node ๋ณ์์ ์ ์ฅ
- ์ฌ๊ท๋ฅผ ๋๋ฉด์ ch[node]๊ฐ 0์ด๋ผ๋ฉด v ์ ์ ์์ node ์ ์ ์ผ๋ก ์ด๋ํ ์ ์๋ค๋ ๊ฒ์ด๋ฏ๋ก ํด๋น ์ ์ ์ผ๋ก ์ด๋ํ์์ ๋ํ๋ด๊ธฐ ์ํด ch[node]๋ฅผ 1๋ก ์ฌํ ๋นํ๋ค.
- DFS(node) ํจ์๋ฅผ ํธ์ถํ๊ณ ์ข ๋ฃ๊ฐ ๋๋ฉด ๋ค์์ ํด๋น ์ ์ ์ผ๋ก ์ด๋ํ ์ ์๋๋ก ch[node]๋ฅผ 0์ผ๋ก ๋ค์ ์ฌํ ๋นํ๋ค. (๋ฐฑํธ๋ํน)
- v์ n์ด ๊ฐ๋ค๋ฉด ํ๋์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ด๋ฏ๋ก answer์ 1์ ๋ํด์ค๋ค.
์ฃผ์ํ ์ โ 1๋ฒ ์ ์ ์์ ์์ํ๋ฏ๋ก ch ๋ฐฐ์ด์ 1๋ฒ ์ธ๋ฑ์ค๋ฅผ 1๋ก ์ด๊ธฐํํ ๋ค์ ์ฌ๊ท๋ฅผ ์์ํด์ผ ํ๋ค.
function solution(n, arr) {
let answer = 0;
const graph = Array.from(Array(n + 1), () => Array());
const ch = Array.from({ length: n + 1 }, () => 0);
// ์ธ์ ๋ฆฌ์คํธ
for (let [a, b] of arr) {
graph[a].push(b);
}
function DFS(v) {
if (v === n) {
answer++;
} else {
for (let i = 0; i < graph[v].length; i++) {
const node = graph[v][i];
if (ch[node] === 0) {
ch[node] = 1;
DFS(node);
ch[node] = 0;
}
}
}
}
ch[1] = 1;
DFS(1);
return answer;
}
let arr = [
[1, 2],
[1, 3],
[1, 4],
[2, 1],
[2, 3],
[2, 5],
[3, 4],
[4, 2],
[4, 5],
];
console.log(solution(5, arr));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 9] 04 - ์ด์งํธ๋ฆฌ ๋์ด์ฐ์ ํ์(BFS) (0) | 2022.11.21 |
---|---|
[JavaScript/section 9] 03 - ๋ฏธ๋ก ํ์ (0) | 2022.11.20 |
[JavaScript/section 9] 01 - ๊ฒฝ๋ก ํ์(์ธ์ ํ๋ ฌ) (0) | 2022.11.15 |
[JavaScript/section 8] 15 - ์๋ค์ ์กฐํฉ (0) | 2022.11.14 |
[JavaScript/section 8] 14 - ์กฐํฉ ๊ตฌํ๊ธฐ (0) | 2022.11.12 |