๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ(DP)๊ณผ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ ์ต๋จ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ ํน์ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ ์ ์์ผ๋ฉฐ, ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์์์ผ ๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด DP๋ผ๊ณ ํ ์ ์๋ ์ด์ ๋ ํน์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ํ๋์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ ํน์ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋งํ ์ ์๋ ์ด์ ๋ ํน์ ์ต๋จ ๊ฑฐ๋ฆฌ์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํด๊ฐ๋ฉฐ ์ต์ข ์ ์ธ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. (๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ ๋ค ๋ค์ ์ฝ์ผ๋ฉด ์ฝ๊ฒ ์ดํด๊ฐ๋ฅ)
ํ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ๋ณตํด์ ๊ณ์ฐํ๋ฉฐ ๊ฐฑ์ ํ๊ธฐ ๋๋ฌธ์ ํ ์ ์ ๋น N(์ ์ ์)๊ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐฐ์ด์ด ํ์ํ๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ์ ์ ์
์ฅ์์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด N*N์ 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ ์ ์๋ค. ์๋์ ํ๋ฅผ ํด์ํด ๋ณด๋ฉด 2๋ฒ ์ ์ ์์ 4๋ฒ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ 7(๊ฒฝ๋ก : 2→1→3→4)์ด๊ณ 3๋ฒ ์ ์ ์์ 2๋ฒ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ 6(๊ฒฝ๋ก : 3→1→2)์ด๋ค.
(๋ค์ต์คํธ๋ผ๋ ๊ฒฐ๋ก ์ ์ผ๋ก ์๋์ ํ๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.)
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๊ณผ์
1. ์์์ ์ ์ ํ
2. ๊ฑฐ๋ฆฌ ๋ฐฐ์ด ์ด๊ธฐํ (์์์ ์ ์ 0์ผ๋ก ๋ค๋ฅธ ๋ ธ๋๋ ๋ฌดํ๋๋ก)
3. ์ง๊ธ๊น์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ค ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง ์ ์ ๋ฐฉ๋ฌธ
4. ํ์ฌ ๋ฐฉ๋ฌธํ ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ๋ค์ ๊ฑฐ๋ฆฌ ๊ฐ์ ๊ฐฑ์
5. ๋จ๊ณ 3๊ณผ 4๋ฅผ ๋ฐ๋ณต
์์ ์ ์ : 1
๊ฑฐ๋ฆฌ ๋ฐฐ์ด ์ด๊ธฐํ
์์ ์ ์ ์ 1๋ก ์ ํํ ํ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์ ์ด๊ธฐํํ๋ค. ํน์ ๋ ธ๋์์ ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ ์์ ํฌํ N๊ฐ์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค. ์๊ธฐ ์์ ์ 0์ผ๋ก ๋๋จธ์ง๋ ๋ฌดํ๋(inf, ∞)๋ก ์ด๊ธฐํํ๋๋ฐ ๋ฌดํ๋์ ์๋ฏธ๋ ๋ ์ ์ ์ด ์ง์ ์ฐ๊ฒฐ๋์ด์์ง ์๋ค๋ ๋ป์ด๋ค.
๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง ์ ์ ๋ฐฉ๋ฌธ
๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ค ํ์ฌ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์์ ๊ฐ์ฅ ์งง์ ๊ฐ์ ๊ฐ์ง ์ ์ ์ ์ ํํด ๋ฐฉ๋ฌธํ๋ค. ํ์ฌ๋ ์๋ฌด ์ ์ ์ ๋ฐฉ๋ฌธํ์ง ์์ ์ํ์ด๊ณ ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์์ 0์ ๊ฐ์ ๊ฐ์ง 1๋ฒ ์ ์ ์ด ๊ฐ์ฅ ์งง์ ๊ฐ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ 1๋ฒ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
์ธ์ ํ ์ ์ ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐฑ์
ํ์ฌ ์ ์ ์์ ์ธ์ ํ ์ ์ ๋ค์ ๋ฐฐ์ด๊ฐ์ ๊ฐฑ์ ํด ์ค๋ค. ์
๋ฐ์ดํธ ์์ dist[์ธ์ ์ ์ ] = min(dist[์ธ์ ์ ์ ], dist[ํ์ฌ์ ์ ] + cost(ํ์ฌ์ ์ ๐ ์ธ์ ์ ์ ))
์ผ๋ก cost(ํ์ฌ์ ์ ๐ ์ธ์ ์ ์ )
์ ํ์ฌ ์ ์ ์์ ํด๋น ์ธ์ ์ ์ ๊น์ง ๊ฑฐ๋ฆฌ(๊ฐ์ค์น)์ด๋ค. ์ด ์์ ์๋ฏธ์ ์ผ๋ก ์๊ฐํด ๋ณด๋ฉด, ํ์ฌ ์์์ ์ ์์ ํด๋น ์ธ์ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๋ฐฐ์ด์ ์ ์ฅ๋์ด ์๋๋ฐ ๊ทธ ๊ฐ๊ณผ ํ์ฌ ๋ฐฉ๋ฌธํ ์ ์ ์ ๊ฑฐ์ณ ๊ฐ๋ ๊ฒฝ๋ก์ ๋น์ฉ๊ณผ ๋น๊ตํ์ฌ ๋ ์งง์ ๋น์ฉ์ผ๋ก ๊ฐฑ์ ํด ์ค๋ค๋ ๋ป์ด๋ค. ํ์ฌ ์ ์ ์์ ์ธ์ ํ ์ ์ ๋ค๋ง ๊ฐฑ์ ํด ์ฃผ๋ ์ด์ ๋ ์ธ์ ํ์ง ์์ ์ ์ ๋ค์ cost(ํ์ฌ์ ์ ๐ ์ธ์ ์ ์ )
๊ฐ ์ด์ฐจํผ ๋ฌดํ์ด ๋๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ์ด ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ฌ ๋ฐฉ๋ฌธํ ์ ์ 1์์ ์ธ์ ํ ์ ์ 2, 3, 4์ ๋ํ ๋ฐฐ์ด๊ฐ์ ๊ฐฑ์ ํ๋ค. ํ์ฌ ๋จ๊ณ๋ ์์์ ์ ๊ณผ ํ์ฌ์ ์ ์ด ๊ฐ์์ ์ธ์ ํ ์ ์ ๋ค์ ๋ํ ๊ฐ์ ๊ฐ์ด ๊ทธ๋๋ก ๊ฐฑ์ ๋์๋๋ฐ, ๋ค์ ์ ์ ๋ถํฐ๋ ์๋ฏธ์ ์ผ๋ก ํ์ ํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค.
dist[2]
= min(dist[2], dist[1] + cost(1๐ 2))
= min(∞, 0+4)
= 4
dist[3]
= min(dist[3], dist[1] + cost(1๐ 3))
= min(∞, 0+2)
= 2
dist[4]
= min(dist[4], dist[1] + cost(1๐ 4))
= min(∞, 0+7)
= 7
๋ค์ ์ ์ ๋ฐฉ๋ฌธ - ๋ฐฐ์ด ๊ฐฑ์ ๋ฐ๋ณต
๋ค์ ๋ฐฉ๋ฌธ ์ ์ ์ ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ค ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ ์ 3์ผ๋ก ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ๊ฐฑ์ ์ ์ ์ 3์ ์ธ์ ํ ์ ์ 1๊ณผ 4 ์ค์ ๋ฐฉ๋ฌธํ์ง ์์ 4์ ๋ํด ์งํํ๋ค. ์ธ์ ํ ์ ์ 1์ ๋ํด ๊ณ์ฐ์ ํ์ง ์๋ ์ด์ ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ ์ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๊ตฌํด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํ ๊ณ์ฐ์ด ๋๋ค.
dist[4]
= min(dist[4], dist[3] + cost(3๐ 4))
= min(7, 2+4)
= 6
์ ์ 4์ ๋ํด ์ดํด๋ณด๋ฉด, ๋ฐฐ์ด์ ์ ์ฅ๋ ํ์ฌ๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ์ธ 7๋ณด๋ค dist[3] + cost(3๐ 4)
์ ๊ฐ์ด 6์ผ๋ก ๋ ์์ ๊ฐฑ์ ๋์๋ค. ์๋ฏธ์ ์ผ๋ก ๋ณด๋ฉด ์ง๊ธ๊น์ง ๊ณ์ฐํ ์์์ ์ 1์์๋ถํฐ ์ ์ 4๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ณด๋ค (๊ฒฝ๋ก๋ ์ด๋ป๋ ๋น์ฉ์ด ์ ์ฅ๋์ด ์์) ํ์ฌ ์ ์ 3์ ๊ฑฐ์ฒ 4๊น์ง ์ด๋ํ๋ ๊ฒฝ๋ก๊ฐ ๋น์ฉ์ด ๋ ์ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์์ ์ ์ ~ ํ์ฌ ์ ์ ๊น์ง์ ๋น์ฉ์ ํ์ฌ ์ ์ ~ ์ธ์ ์ ์ ๊น์ง์ ๋น์ฉ์ ๋ํ ๊ฐ์ผ๋ก ๊ฐฑ์ ํด ์ค๋ค.
๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ค ๊ฐ์ฅ ๊ฐ์ด ์์ ์ ์ 2๋ฅผ ๋ฐฉ๋ฌธํ์๊ณ ์ ์ 2์ ์ธ์ ์ ์ ์ธ 1๊ณผ 3์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ์ฌ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐฑ์ ์์ด ๋ค์ ์ ์ ์ผ๋ก ๋์ด๊ฐ๋ค.
๋ฐฉ๋ฌธํ์ง ์์ ์ ์ 4๋ฅผ ๋ฐฉ๋ฌธํ์๊ณ ๋ ์ด์ ๊ฐฑ์ ํ ์ ์ ์ด ์์ด ์ข ๋ฃ๋๋ค.
์์ ๊ณผ์ ์ ํตํด ์์ ์ ์ 1์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๊ฒ ๋์๋ค. ๋ชจ๋ ์ ์ ์ ๋ํด ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๊ตฌํ๊ณ ์ ํ๋ค๋ฉด ์์ ์ ์ ์ 2, 3, 4๋ก ๋ฐ๊พธ์ด๊ฐ๋ฉฐ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
๊ทธ๋ฆผ์์ ์์๋ก ๋ ๊ทธ๋ํ๋ ๋ฐฑ์ค์ 1238๋ฒ ํํฐ์ ์์ ์์ ๊ฐ์ ธ์๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋๋ฐ ๋์์ด ๋ ๊ฑฐ๋ค. (์ ๋ฐ์ดํธ ๊ณผ์ ์ด ๋ง์ ๊ทธ๋ํ๋ก ์์๋ฅผ ๋ค๊ฑธ...)
'๐ ์ฝํ ์ฐ์ต์ฅ > ๐ ์ต๋จ๊ฒฝ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Beakjoon] ๋ฐฑ์ค 28354_๋งํฌ ์ปท ํ ๋งํ (Java) (2) | 2023.09.04 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ (Bellman-Ford Algorithm) (0) | 2023.07.05 |