πŸ“’ Algorithm

[μ½”λ”© ν…ŒμŠ€νŠΈ ν•©κ²©μž 되기 문제 39] λ„ˆλΉ„ μš°μ„  탐색 순회

s2ylvia 2024. 9. 26. 00:36

문제 μ„€λͺ…

λ„ˆλΉ„ μš°μ„  νƒμƒ‰μœΌλ‘œ λͺ¨λ“  κ·Έλž˜ν”„μ˜ λ…Έλ“œλ₯Ό μˆœνšŒν•˜λŠ” ν•¨μˆ˜ solution()을 μž‘μ„±ν•˜μ„Έμš”. μ‹œμž‘ λ…Έλ“œλŠ” start둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€. graphλŠ” [좜발 λ…Έλ“œ, 도착 λ…Έλ“œ] μŒλ“€μ΄ λ“€μ–΄ μžˆλŠ” λ°°μ—΄μž…λ‹ˆλ‹€. λ°˜ν™˜κ°’μ€ κ·Έλž˜ν”„μ˜ μ‹œμž‘ λ…Έλ“œλΆ€ν„° λͺ¨λ“  λ…Έλ“œλ₯Ό λ„ˆλΉ„ μš°μ„  νƒμƒ‰μœΌλ‘œ μ§„ν–‰ν•œ μˆœμ„œλŒ€λ‘œ λ…Έλ“œκ°€ μ €μž₯된 λ°°μ—΄μž…λ‹ˆλ‹€.

 

μ œμ•½ 쑰건

  • λ…Έλ“œμ˜ μ΅œλŒ€ κ°œμˆ˜λŠ” 100개λ₯Ό λ„˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • μ‹œμž‘ λ…Έλ“œλΆ€ν„° μ‹œμž‘ν•΄μ„œ λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•  수 μžˆλŠ” κ²½λ‘œκ°€ 항상 μžˆμŠ΅λ‹ˆλ‹€.
  • κ·Έλž˜ν”„μ˜ λ…Έλ“œλŠ” μˆ«μžμž…λ‹ˆλ‹€.

μž…μΆœλ ₯의 예

graph start return
[(1,2),(1,3),(2,4),(2,5),(3,6),(3,7),(4,8),(5,8),(6,9),(7,9)] 1 [1,2,3,4,5,6,7,8,9]
[(0,1),(1,2),(2,3),(3,4),(4,5),(5,0)] 1 [1,2,3,4,5,0]

 

μ •λ‹΅

function solution(graph, start) {
    //κ·Έλž˜ν”„λ₯Ό 인접 리슀트둜
    const adjList = {};
    
    for(const [start,end] of graph){
        if(!adjList[start]) adjList[start] = [];
        adjList[start].push(end);
    }
    
    const visited = new Set(); //λ°©λ¬Έ μ—¬λΆ€ 처리
    const queue = []; //큐둜 bfsλ₯Ό λŒλ¦΄κ±°μž„
    
    queue.push(start);
    visited.add(start); //μ‹œμž‘ λ…Έλ“œλ₯Ό λ°”λ‘œ 방문처리
    const result = [start]; //λ°”λ‘œ μ‹œμž‘λ…Έλ“œ 결과배열에 푸쉬
    
    //큐 λΉŒλ•ŒκΉŒμ§€ λŒλ¦°λ‹€
    while(queue.length > 0){
        const node = queue.shift(); //νŒν•΄μ„œ 인근 λ…Έλ“œλ₯Ό μ°Ύμ„κ±°μž„
        for(let neighbor of adjList[node] || []){
            if(!visited.has(neighbor)){
                //λ°©λ¬Έν•˜μ§€μ•Šμ•˜μ„ 경우 탐색
                queue.push(neighbor);
                visited.add(neighbor);
                result.push(neighbor);
            }
        }
    }
    
    return result;
}