๊ทธ๋ํ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ์ด์ด ์์๋ ์ค์_๋ฐฐ์ด ๊ฐ์ฒด์ ๋ํ ๊ณ ์ฐฐ
๋ฌธ์
https://github.com/choi2601/LeetCode-ProblemSolving/tree/main/797-all-paths-from-source-to-target
GitHub - choi2601/LeetCode-ProblemSolving: ๐จ๐ผ๐ป LeetCode ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ฝ๋ ์ ์ฅ์
๐จ๐ผ๐ป LeetCode ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ฝ๋ ์ ์ฅ์. Contribute to choi2601/LeetCode-ProblemSolving development by creating an account on GitHub.
github.com
๋ฆฟ์ฝ๋์์ ์ธ์ ํ๋ ฌ ๊ทธ๋ํ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ์ด์ด ์๋ ์ค์๋ก ์ธํด ์ค๋ ์๊ฐ ๊ณ ๋ฏผ์ ํ๋ค.
๋ค์๋ ๊ฐ์ ์ค์๋ฅผ ํ์ง ์๊ธฐ ์ํด ํด๋น ๋ถ๋ถ์ ์งง๊ฒ ํฌ์คํ ํ๊ณ ์ ํ๋ค.
๋ฐฐ์ด ๊ฐ์ฒด
const answer = [];
const n = graph.length;
const nodes = Array.from(Array(n), () => Array());
const ch = Array.from({length: n}, () => 0);
for(let i = 0; i < graph.length; i++) {
const route = graph[i];
for(let j = 0; j < route.length; j++) {
const path = route[j];
nodes[i].push(path);
}
}
const tmp = [0];
function DFS(v) {
if(v === n - 1) {
answer.push(tmp);
return;
}
else {
for(let i = 0; i < nodes[v].length; i++) {
if(ch[nodes[v][i]] === 0) {
ch[nodes[v][i]] = 1;
tmp.push(nodes[v][i]);
DFS(nodes[v][i]);
ch[nodes[v][i]] = 0;
tmp.pop();
}
}
}
}
ch[0] = 1;
DFS(0);
return answer;
ํด๋น ์ฝ๋๋ ์ฒ์์ ์์ฑํ ์ฝ๋๋ก์, ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ ์ ๋ต์ด ํ๋ฆฌ๊ฒ ๋์๋ค.
[[0],[0]]
์ง๋์จ ๊ฒฝ๋ก๋ฅผ ์์ ์ ์ฅํ๋ ๋ณ์์ธ tmp๋ฅผ ์ฝ์์ฐฝ์ ์ฐ์ด๋ดค์ ๋๋ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก ํ์ ์ด ๋์ค๋๋ฐ, ๊ฒฝ๋ก๊ฐ ๋ด๊ธด ์ ๋ต ๋ณ์๋ฅผ ๋ฐํํ๋ฉด ์์ ๊ฐ์ด ์ด๊ธฐ ๊ฒฝ๋ก์ธ 0๋ง์ ๋ด์ ๋ฐฐ์ด์ด ๋์๋ค.
์ค๋ ์๊ฐ ๊ณ ๋ฏผ์ ํด๋ณธ ๊ฒฐ๊ณผ, ๋ฐฐ์ด์ด ๊ฐ์ฒด ๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํด ๋๋ค.
๋ฐฐ์ด์ ๊ฐ์ฒด๋ก์, ์ฐธ์กฐ๊ฐ์ ์ํด ๊ฐ(value)๊ฐ ๊ณต์ ๋๊ธฐ ๋๋ฌธ์, ๋ค์ ๊ฒฝ๋ก๋ฅผ ๋๋์์์ ๋ ์ด์ ํ์ ์ ์์ ๊ธฐ ์ํ tmp.pop() ์ฐ์ฐ์ด ์ต์ข ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น ๊ฒ ์ด์๋ค.
์ด์ ์๋ณธ ๋ฐฐ์ด์ ์ ๋ต ๋ณ์์ ๋ฐ๋ก push()ํ๋ ๊ฒ์ด ์๋, Array.prototype.slice()๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ๋ฐฐ์ด์ ๊น์ ๋ณต์ฌํ ์๋ก์ด ์ฐธ์กฐ๊ฐ์ ์ง๋ ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ์ ๋ต ๋ณ์์ push() ํด์ค์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.