๐Ÿ’‚โ€โ™‚๏ธ[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถ€๋Œ€๋ณต๊ท€

Chobbyยท2023๋…„ 1์›” 16์ผ
1

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
175/345

๐Ÿงก๋ฌธ์ œ ์„ค๋ช…

๊ฐ•์ฒ ๋ถ€๋Œ€์˜ ๊ฐ ๋ถ€๋Œ€์›์ด ์—ฌ๋Ÿฌ ์ง€์—ญ์— ๋ฟ”๋ฟ”์ด ํฉ์–ด์ ธ ํŠน์ˆ˜ ์ž„๋ฌด๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ง€๋„์—์„œ ๊ฐ•์ฒ ๋ถ€๋Œ€๊ฐ€ ์œ„์น˜ํ•œ ์ง€์—ญ์„ ํฌํ•จํ•œ ๊ฐ ์ง€์—ญ์€ ์œ ์ผํ•œ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๋‘ ์ง€์—ญ ๊ฐ„์˜ ๊ธธ์„ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋ชจ๋‘ 1๋กœ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฐ ๋ถ€๋Œ€์›์€ ์ง€๋„ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋‹จ์‹œ๊ฐ„์— ๋ถ€๋Œ€๋กœ ๋ณต๊ท€ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ ๊ตฐ์˜ ๋ฐฉํ•ด๋กœ ์ธํ•ด, ์ž„๋ฌด์˜ ์‹œ์ž‘ ๋•Œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋˜๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†์–ด์ ธ ๋ณต๊ท€๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถ€๋Œ€์›๋„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ•์ฒ ๋ถ€๋Œ€๊ฐ€ ์œ„์น˜ํ•œ ์ง€์—ญ์„ ํฌํ•จํ•œ ์ด์ง€์—ญ์˜ ์ˆ˜ n, ๋‘ ์ง€์—ญ์„ ์™•๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ ์ •๋ณด๋ฅผ ๋‹ด์€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด roads, ๊ฐ ๋ถ€๋Œ€์›์ด ์œ„์น˜ํ•œ ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์—ญ๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด sources, ๊ฐ•์ฒ ๋ถ€๋Œ€์˜ ์ง€์—ญ destination์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฃผ์–ด์ง„ sources์˜ ์›์†Œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ•์ฒ ๋ถ€๋Œ€๋กœ ๋ณต๊ท€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ์‹œ๊ฐ„์„ ๋‹ด์€ ๋ฐฐ์—ด์„ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ๋ณต๊ท€๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ถ€๋Œ€์›์˜ ์ตœ๋‹จ์‹œ๊ฐ„์€ -1์ž…๋‹ˆ๋‹ค.


๐Ÿ’›์ œํ•œ์‚ฌํ•ญ

  • 3 โ‰ค n โ‰ค 100,000
    • ๊ฐ ์ง€์—ญ์€ ์ •์ˆ˜ 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
  • 2 โ‰ค roads์˜ ๊ธธ์ด โ‰ค 500,000
    • roads์˜ ์›์†Œ์˜ ๊ธธ์ด = 2
    • roads์˜ ์›์†Œ๋Š” [a, b] ํ˜•ํƒœ๋กœ ๋‘ ์ง€์—ญ a, b๊ฐ€ ์„œ๋กœ ์™•๋ณตํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.(1 โ‰ค a, b โ‰ค n, a โ‰  b)
    • ๋™์ผํ•œ ์ •๋ณด๊ฐ€ ์ค‘๋ณตํ•ด์„œ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      • ๋™์ผํ•œ [a, b]๊ฐ€ ์ค‘๋ณตํ•ด์„œ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
      • [a, b]๊ฐ€ ์žˆ๋‹ค๋ฉด [b, a]๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1 โ‰ค sources์˜ ๊ธธ์ด โ‰ค 500
    • 1 โ‰ค sources[i] โ‰ค n
  • 1 โ‰ค destination โ‰ค n

๐Ÿ’š์ž…์ถœ๋ ฅ ์˜ˆ

nroadssourcesdestinationresult
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๋Š” ์ง€์—ญ 1๊ณผ ๊ธธ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ง€์—ญ 2์—์„œ ์ง€์—ญ 1์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋Š” 1์ž…๋‹ˆ๋‹ค.
  • ์ง€์—ญ 3์—์„œ ์ง€์—ญ 1๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” ์ง€์—ญ 3 โ†’ ์ง€์—ญ 2 โ†’ ์ง€์—ญ 1 ์ˆœ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ง€์—ญ 3์—์„œ ์ง€์—ญ 1์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋Š” 2์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ [1, 2]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ์ง€์—ญ 1์—์„œ ์ง€์—ญ 5์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” ์ง€์—ญ 1 โ†’ ์ง€์—ญ 2 โ†’ ์ง€์—ญ 5 ๋˜๋Š” ์ง€์—ญ 1 โ†’ ์ง€์—ญ 4 โ†’ ์ง€์—ญ 5 ์ˆœ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋Š” 2์ž…๋‹ˆ๋‹ค.
  • ์ง€์—ญ 3์—์„œ ์ง€์—ญ 5๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ง€์—ญ 3์—์„œ ์ง€์—ญ 5๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋Š” -1์ž…๋‹ˆ๋‹ค.
  • ์ง€์—ญ 5์—์„œ ์ง€์—ญ 5๋Š” ์ด๋™ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋Š” 0์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ [2, -1, 0]์„ returnํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’œ๋‚˜์˜ ํ’€์ด

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๋‹˜์˜ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ œ์ž‘๋˜์—ˆ์Œ์„ ๋ฐํž™๋‹ˆ๋‹ค.

profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€