
๊ฐ์ฒ ๋ถ๋์ ๊ฐ ๋ถ๋์์ด ์ฌ๋ฌ ์ง์ญ์ ๋ฟ๋ฟ์ด ํฉ์ด์ ธ ํน์ ์๋ฌด๋ฅผ ์ํ ์ค์ ๋๋ค. ์ง๋์์ ๊ฐ์ฒ ๋ถ๋๊ฐ ์์นํ ์ง์ญ์ ํฌํจํ ๊ฐ ์ง์ญ์ ์ ์ผํ ๋ฒํธ๋ก ๊ตฌ๋ถ๋๋ฉฐ, ๋ ์ง์ญ ๊ฐ์ ๊ธธ์ ํต๊ณผํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ชจ๋ 1๋ก ๋์ผํฉ๋๋ค. ์๋ฌด๋ฅผ ์ํํ ๊ฐ ๋ถ๋์์ ์ง๋ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ์ต๋จ์๊ฐ์ ๋ถ๋๋ก ๋ณต๊ทํ๊ณ ์ ํฉ๋๋ค. ๋ค๋ง ์ ๊ตฐ์ ๋ฐฉํด๋ก ์ธํด, ์๋ฌด์ ์์ ๋์ ๋ค๋ฅด๊ฒ ๋๋์์ค๋ ๊ฒฝ๋ก๊ฐ ์์ด์ ธ ๋ณต๊ท๊ฐ ๋ถ๊ฐ๋ฅํ ๋ถ๋์๋ ์์ ์ ์์ต๋๋ค.
๊ฐ์ฒ ๋ถ๋๊ฐ ์์นํ ์ง์ญ์ ํฌํจํ ์ด์ง์ญ์ ์ n, ๋ ์ง์ญ์ ์๋ณตํ  ์ ์๋ ๊ธธ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด roads, ๊ฐ ๋ถ๋์์ด ์์นํ ์๋ก ๋ค๋ฅธ ์ง์ญ๋ค์ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด sources, ๊ฐ์ฒ ๋ถ๋์ ์ง์ญ destination์ด ์ฃผ์ด์ก์ ๋, ์ฃผ์ด์ง sources์ ์์ ์์๋๋ก ๊ฐ์ฒ ๋ถ๋๋ก ๋ณต๊ทํ  ์ ์๋ ์ต๋จ์๊ฐ์ ๋ด์ ๋ฐฐ์ด์ returnํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋ณต๊ท๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํด๋น ๋ถ๋์์ ์ต๋จ์๊ฐ์ -1์
๋๋ค.
n โค 100,000n๊น์ง์ ๋ฒํธ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.roads์ ๊ธธ์ด โค 500,000roads์ ์์์ ๊ธธ์ด = 2roads์ ์์๋ [a, b] ํํ๋ก ๋ ์ง์ญ a, b๊ฐ ์๋ก ์๋ณตํ  ์ ์์์ ์๋ฏธํฉ๋๋ค.(1 โค a, b โค n, a โ  b)sources์ ๊ธธ์ด โค 500sources[i] โค ndestination โค n| n | roads | sources | destination | result | 
|---|---|---|---|---|
| 3 | [[1, 2], [2, 3]] | [2, 3] | 1 | [1, 2] | 
| 5 | [[1, 2], [1, 4], [2, 4], [2, 5], [4, 5]] | [1, 3, 5] | 5 | [2, -1, 0] | 
์ ์ถ๋ ฅ ์ #1
์ ์ถ๋ ฅ ์ #2
function solution(n, roads, sources, destination) {
    
    // ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ ํ์ธํ  ๋ฐฐ์ด ์์ฑ
    const visited = new Array(n+1).fill(Infinity)
    
    // ์ฐ๊ฒฐ๋ ๊ธธ ์์ฑ
    const connect = new Array(n+1).fill(0).map(_ => [])
    roads.forEach(([from, to]) => {
        connect[from].push(to)
        connect[to].push(from)
    })
    // BFS ์๊ณ ๋ฆฌ์ฆ
    // ๋ชฉ์ ์ง๋ก ๋ถํฐ ๋ถ๋์์ ์์น๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์
    const q = [destination]
    visited[destination] = 0
    while(q.length) {
        const cur = q.shift()
        // ๊ฐ ์ ์๋ ๋ค์ ๊ธธ
        for(const next of connect[cur]) {
            // ๊ฐ๋ณด์ง ์์ ๊ธธ์ด๋ผ๋ฉด, ๊ทธ๋ ๊ธฐ์ ์ด๊ธฐ์ ๋ชจ๋  ๊ฐ์ Infinity๋ก ์ค์ 
            if(visited[cur]+1 < visited[next]) {
                visited[next] = visited[cur]+1
                q.push(next)
            }
        }
    }
    return sources.map(a => visited[a] !== Infinity ? visited[a] : -1)
}

ํด๋น ํ์ด๋ my-first-programming๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ์๋์์์ ๋ฐํ๋๋ค.