๐Ÿ‘จโ€๐Ÿ’ป Seungineer's GitHub Contribution

๐Ÿงญ KAIST JUNGLE/Algorithm

[๋ฐฑ์ค€]11779 - ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ 2 (#ํŒŒ์ด์ฌ #๋‹ค์ต์ŠคํŠธ๋ผ ๊ฒฝ๋กœ ์ฐพ๊ธฐ)

seungineer = seungwoo + engineer 2024. 11. 24. 23:46
๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์—์„œ ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ์ง!
 

11779๋ฒˆ: ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ 2

 

boj.ma

 

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ‘ํŠน์ • ์‹œ์ž‘ ์ง€์ ’์—์„œ ‘์–ด๋–ค ๋งˆ์ง€๋ง‰ ์ง€์ ’์œผ๋กœ ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์ด๋™ํ•  ๋•Œ์˜ '์ตœ์†Œ ๋น„์šฉ'์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋‹ค์ต์ŠคํŠธ๋ผ์—์„œ heap queue๋ฅผ pop ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ •๋ณด๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ด€๋ จ ์ •๋ณด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์œ ์˜๋ฏธํ•œ ์ •๋ณด์ด๋‹ค. ์—ฌ๊ธฐ์— ๊ฒฝ๋กœ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

path = [st]
hq.heappush(qu, [0, st, path])
while qu:

 

ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด path ์ •๋ณด๊ฐ€ heap queue์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•œ ์ฒซ heap queue๋ถ€ํ„ฐ ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

for cost, j in graph[st]:
        if prev_cost + cost <= vis[j]:
            vis[j] = prev_cost + cost
            new_his = [h for h in history]
            new_his.append(j)
            hq.heappush(qu, [prev_cost + cost, j, new_his]) # [๋น„์šฉ, ๋„์ฐฉ์ง€, ๊ฒฝ๋กœ]

 

์ดํ›„์—๋Š” st๋ผ๋Š” ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”(=for cost, j in graph[st]:) ํ›„๋ณด๋ฅผ heap์— ๋„ฃ์„ ๋•Œ new_his์— ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ heap queue์— ๊ฒฝ๋กœ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•œ๊ณ„์ 

์ด๋ ‡๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ์ค‘ ํ•œ ๊ฐ€์ง€ ๊ฒฝ๋กœ๋งŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.