๋ฌธ์ ์ค๋ช
๊น์ด ์ฐ์ ํ์์ผ๋ก ๋ชจ๋ ๊ทธ๋ํ์ ๋ ธ๋๋ฅผ ์ํํ๋ ํจ์ solution()์ ์์ฑํ์ธ์. ์์ ๋ ธ๋๋ start๋ก ์ฃผ์ด์ง๋๋ค. graph๋ [์ถ๋ฐ ๋ ธ๋, ๋์ฐฉ ๋ ธ๋] ์๋ค์ด ๋ค์ด ์๋ ๋ฐฐ์ด์ ๋๋ค. ๋ฐํ๊ฐ์ ๊ทธ๋ํ์ ์์ ๋ ธ๋๋ถํฐ ๋ชจ๋ ๋ ธ๋๋ฅผ ๊น์ด ์ฐ์ ํ์์ผ๋ก ์งํํ ์์๋๋ก ๋ ธ๋๊ฐ ์ ์ฅ๋ ๋ฆฌ์คํธ์ ๋๋ค.
์ ์ฝ ์กฐ๊ฑด
- ๋ ธ๋์ ์ต๋ ๊ฐ์๋ 100๊ฐ๋ฅผ ๋์ง ์์ต๋๋ค.
- ์์ ๋ ธ๋๋ถํฐ ์์ํด์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ํญ์ ์์ต๋๋ค.
- ๊ทธ๋ํ์ ๋ ธ๋๋ ๋ฌธ์์ด์ ๋๋ค.
์ ์ถ๋ ฅ์ ์
graph | start | return |
[['A','B'], ['B','C'], ['C','D'], ['D', 'E']] | 'A' | ['A','B','C','D','E'] |
[['A','B'],['A','C'],['B','D'],['B','E'],['C','F'],['E','F']] | 'A' | ['A','B','D','E','F','C'] |
์ ๋ต
function solution(graph, start) {
//๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ๋ณํ
const adjList = {};
for(const [start,end] of graph){
if(!adjList[start]) adjList[start] = []; //์์ผ๋ฉด ์ฐ์ ๋น๋ฐฐ์ด ๋์
adjList[start].push(end); //๋์ฐฉํ๋ ๋
ธ๋๋ฅผ push
}
function dfs(node, visited, result){
visited.add(node); //๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ visited์ ์ถ๊ฐ
result.add(node); //๋ฐฉ๋ฌธํ ์์๋ฅผ ๊ฒฐ๊ณผ์ ์ถ๊ฐ
(adjList[node] || []).forEach((neighbor) => {
//์ธ์ ํ ์ ๋ค์ ํ์
if(!visited.has(neighbor)) dfs(neighbor, visited, result); //๋ฐฉ๋ฌธ์ํ์ผ๋ฉด ํ์
})
}
const visited = new Set(); //๋ฐฉ๋ฌธ์ฌ๋ถ
const result = []; //๋ฐํํ ๊ฒฐ๊ณผ
dfs(start, visited, result);
return result;
}