[BOJ][๐ŸŸก4][๋ฐฑ์ค€#09694] ๋ฌด์—‡์„ ์•„๋Š๋ƒ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ˆ„๊ตฌ๋ฅผ ์•„๋Š๋ƒ๊ฐ€ ๋ฌธ์ œ๋‹ค

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #9694


๋ฌธ์ œ

ํ•œ์‹ ์ด๋Š” ์ Š๊ณ , ๋˜‘๋˜‘ํ•˜๊ณ  ๋งค์šฐ ์œ ๋ช…ํ•œ ์ •์น˜์ธ์ด๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๊ทธ๋Š” ์—ฌ์ „ํžˆ ์ž์‹ ์˜ ์„ฑ๊ณต์„ ์œ„ํ•ด์„œ๋„ ์ธ๊ฐ„๊ด€๊ณ„๋Š” ์ค‘์š”ํ•œ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๊ณ ์žˆ๋‹ค. ๋‹ค์Œ๋‹ฌ์— ์—ด๋ฆด ๊ตญํšŒ์˜์›์„ ๊ฑฐ์—์„œ ํ•œ์‹ ์ด๋Š” ์ž์‹ ์˜ ๋‹น์ด ๋ฐ˜๋“œ์‹œ ์ด๊ธฐ๊ธธ ํฌ๋งํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ์ตœ๊ณ ์˜์›์˜ ์ง€์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ด ์ตœ๊ณ ์˜์›์˜ ์ง€์ง€๋ฅผ ๋ฐ›๊ธฐ์œ„ํ•ด ํ•œ์‹ ์ด๋Š” ์ „๋žต์„ ์„ธ์› ๋‹ค. ๊ทธ๋Š” ๊ทธ ์ตœ๊ณ ์˜์›์„ ์ง์ ‘์ ์œผ๋กœ ๋งŒ๋‚ ์ˆ˜ ์—†๋‹ค๋ฉด ๊ทธ๋ฅผ ์•Œ๊ณ ์žˆ๋Š” ์ธ๋งฅ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋‚ ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์„ ์œ„ํ•ด์„œ ์šฐ์„  ์ •์น˜์ธ๋“ค์˜ ์นœ๋ฐ€๋„๋ฅผ ์กฐ์‚ฌํ•˜์˜€๋Š”๋ฐ ์นœ๋ฐ€๋„๋ฅผ ๋‹ค์Œ 4๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ธฐ๋กํ•ด๋†“์•˜๋‹ค. ์ตœ์ธก๊ทผ [1] / ์ธก๊ทผ [2] / ๋น„์ฆˆ๋‹ˆ์Šค๊ด€๊ณ„ [3] / ์ง€์ธ [4] [๋‘ ์‚ฌ๋žŒ์˜ ๊ด€๊ณ„๋Š” ์ด 4๊ฐ€์ง€ ๊ฒฝ์šฐ์ค‘ ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น๋˜๋ฉฐ, ์ (enemy)๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.] ํ•œ์‹ ์ด๋Š” ์ง€์ธ๋ณด๋‹ค๋Š” ์ตœ์ธก๊ทผ ์นœ๊ตฌ์—๊ฒŒ ์†Œ๊ฐœ๋ฐ›๊ธฐ ์›ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๊ณ ์˜์›์„ ๋งŒ๋‚˜๊ธฐ๊นŒ์ง€์˜ ์ธ๋งฅ๊ฐ„ ์นœ๋ฐ€๋„์˜ ํ•ฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค. N๋ช…์˜ ์ •์น˜์ธ ๋ช…๋‹จ์œผ๋กœ๋ถ€ํ„ฐ ๊ทธ๋“ค์˜ ์ธ๋งฅ ์นœ๋ฐ€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ •์น˜์ธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ํ•œ์‹ ์ด๊ฐ€ ์ตœ๊ณ ์˜์›์„ ๋งŒ๋‚˜๊ธฐ๊นŒ์ง€์˜ ์นœ๋ฐ€๋„์˜ ํ•ฉ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.


์ž…๋ ฅ

๋งจ์œ„ ์ฒซ ๋ฒˆ์งธ ์ค„์— T(1 <T< 100)๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๊ฒƒ์„ ๋”ฐ๋ผ ๋‹ค์Œ์ค„์— ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. N(N โ‰ค 20)์€ ๊ด€๊ณ„์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, M(5 โ‰คMโ‰ค 20)์€ ์ •์น˜์ธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ๋‹ค์Œ N์ค„์—๋Š” ์ •์น˜์ธ x, ๊ทธ์˜ ์นœ๊ตฌ y (0 โ‰คx,y< M), ๋‘์‚ฌ๋žŒ๊ฐ„์˜ ์นœ๋ฐ€๋„ z(1 โ‰คzโ‰ค 4)๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ •์น˜์ธ 0๋ฒˆ์€ ํ•œ์‹ ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  M-1์€ ์ตœ๊ณ ์˜์›์„ ์˜๋ฏธํ•œ๋‹ค.


์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” โ€œCase #x: โ€œ์˜ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ x๋Š” ์ผ€์ด์Šค ๋ฒˆํ˜ธ(1๋ถ€ํ„ฐ ์‹œ์ž‘)์„ ์˜๋ฏธํ•œ๋‹ค. ์ฝœ๋ก ๋’ค์— ํ•œ์‹ ์ด๊ฐ€ ์ตœ๊ณ ์˜์›์„ ๋งŒ๋‚ ์ˆ˜ ์žˆ๋‹ค๋ฉด 0๋ฒˆ ์ •์น˜์ธ(ํ•œ์‹ ์ด)๋ฅผ ์‹œ์ž‘์œผ๋กœ M-1๋ฒˆ ์ •์น˜์ธ(์ตœ๊ณ ์˜์›)๊นŒ์ง€ ๋งŒ๋‚œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๊ณ , ์ตœ๊ณ ์˜์›์„ ๋งŒ๋‚ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—” -1์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

2
7 5
0 1 2
1 3 4
0 2 1
0 4 3
3 2 3
3 4 4
2 4 1
3 5
0 1 2
1 3 4
4 2 1


์ถœ๋ ฅ

Case #1: 0 2 4
Case #2: -1


My Sol

import sys
input = sys.stdin.readline
from collections import deque

T = int(input())
for t in range(T):
    N, M = map(int, input().split())
    G = [[] for _ in range(M+1)]
    for _ in range(N):
        u, v, w = map(int, input().split())
        G[u].append((v, w))
        G[v].append((u, w))

    check = [[1e5, []] for _ in range(M+1)]
    check[0] = [0, [0]]
    Q = deque()
    Q.append((0, 0))
    while Q:
        u, cost = Q.popleft()
        for v, w in G[u]:
            if not (cost + w < check[v][0]): continue
            check[v] = [cost + w, check[u][1]+[v]]
            Q.append((v, cost+w))

    ret = [-1] if check[M-1][0] == 1e5 else check[M-1][1]
    print(f'Case #{t+1}:', *ret)

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ๋‹จ์ง€ ์ตœ์†Œ๋น„์šฉ์ด ์•„๋‹ˆ๋ผ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด์•ผํ–ˆ๊ณ , ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ๋น„์šฉ์„ ๋น„๊ตํ•˜์—ฌ ๊ฐฑ์‹ ํ•˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œ๋น„์šฉ์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฒฝ๋กœ๊นŒ์ง€ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ ๋ฐฐ์—ด์— ๋น„์šฉ๊ณผ ๊ฒฝ๋กœ๋ฅผ ๋„ฃ์–ด ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์—ˆ๋‹ค.


์ ‘๊ทผ ๋ฐฉ์‹

  1. ๋น„์šฉ ์ฒดํฌ ๋ฐฐ์—ด check๋ฅผ [1e5, []]๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. ์‹œ์ž‘ ์ง€์ ์„ [0, [0]]์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  3. ์ด๋ฅผ deque Q์— ๋„ฃ๋Š”๋‹ค. ์•ž์œผ๋กœ ์ตœ์†Œ๊ฒฝ๋กœ๋กœ ๊ฐฑ์‹ ๋˜๋Š” ์ง€์ ์€ deque์— ๋„ฃ์„ ๊ฒƒ์ด๋‹ค.
  4. ๋งค ๋ฐ˜๋ณต์˜ ์‹œ์ž‘์  u์™€ ์—ฐ๊ฒฐ๋œ G[u]์˜ ์ง€์ ๋“ค์„ v, u์™€ v ์‚ฌ์ด์˜ ๋น„์šฉ์„ w๋กœ ๋‘”๋‹ค.
  5. ๋งŒ์•ฝ cost, ์ฆ‰ 0๋ฒˆ๋ถ€ํ„ฐ u๊นŒ์ง€์˜ ์ตœ์†Œ๋น„์šฉ๊ณผ w๋ฅผ ๋”ํ•œ ๊ฐ’์ด ํ˜„์žฌ 0๋ฒˆ๋ถ€ํ„ฐ v๊นŒ์ง€์˜ ์ตœ์†Œ๋น„์šฉ๋ณด๋‹ค ์ ์€ ๊ฒฝ์šฐ, ์ตœ์†Œ๋น„์šฉ๊ณผ ๊ฒฝ๋กœ๋ฅผ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
  6. ๊ฐฑ์‹ ํ–ˆ์œผ๋ฏ€๋กœ Q์— ์ตœ์†Œ๋น„์šฉ๊ณผ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์ด๊ฒƒ์ด ๋˜๋‹ค๋ฅธ ์‹œ์ž‘์ ์ด ๋  ๊ฒƒ์ด๋‹ค.
  7. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฐฑ์‹ ์„ ๋งˆ์นœ ๋’ค, M-1์ง€์ ์˜ ์ตœ์†Œ๋น„์šฉ์„ ์ฒดํฌํ•œ๋‹ค.
  8. ์ด๊ฒƒ์ด 1e5๋ผ๋ฉด ๊ฐฑ์‹ ์ด ์•ˆ ๋œ ๊ฒƒ์ด๋ฏ€๋กœ -1์ด๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ๊ฐฑ์‹ ์„ ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ path๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ