๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ Algorithm

[์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ ๋ฌธ์ œ 38] ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์ˆœํšŒ

by s2ylvia 2024. 9. 26.

๋ฌธ์ œ ์„ค๋ช…

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ๋ชจ๋“  ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋Š” ํ•จ์ˆ˜ 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;
}