ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ก Introduction
์ง๋ ํฌ์คํธ์์๋ ์์ ๊ทธ๋ํ๋ฅผ ํตํด ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra's algorithm) ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด์๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ค๋น๋ฅผ ํ๋ค.
๐ผ ๊ทธ๋ํ์ ํํ
๊ฐ์ฅ ๋จผ์ , ๊ทธ๋ํ๋ฅผ ์ด๋ป๊ฒ ํํํ ์ง ์๊ฐํด๋ณด์. ์ผ๋จ ๊ฐ ์ ์ ๋ค์ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ , ๊ฐ ์ ์ ๋ค๊ณผ ๊ทธ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ํํํ ์ ์๋ค:
(์ ์ 1, ์ ์ 2, ๊ฑฐ๋ฆฌ)
๊ทธ๋ฌ๋ฏ๋ก, ์ง๋ ํฌ์คํธ์์ ์ฌ์ฉ๋ ๊ทธ๋ํ๋ ์ค์ฒฉ ๋ฆฌ์คํธ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค:
[[A, B, 3], [A, C, 5], [B, D, 4], [C, D, 7]]
๋ง์ ์ด ๋ฐฉ์์ A, B, C, D ์ ๊ฐ์ด ๋ฌธ์์ด ํํ๋ก ์ ์ ์ ๋ํ๋ด๋ฉด์ ๋์์ ์ ์๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด์ผ ํด์ ์ผ๊ด๋ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ฉํด์ผ ํ๋ ์๋ฃ ๊ตฌ์กฐ๋ ์ ํฉํ์ง ์๋๋ค๋ ์๊ฐ์ด ๋ ๋ค. ๋ฌผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋ ๋ฌธ์์ด๋ก ๋ํ๋ผ ์ ์์ง๋ง, ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ์ ์๋ฐฉํฅ์ด ์๋๋ผ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ๊ฑฐ๋ฆฌ๋ฅผ ํํํ ์ ์๋ค๋ ๊ฒ์ด๋ค. (A, B, 3) ์ด๋ผ๋ ์ ๋ณด๋ (B, A, 3) ๋ผ๋ ์ ๋ณด๋ฅผ ํจ์ถํ ์ ์๋ค.
๊ทธ๋์ ๊ฐ ์ ์ ์ ๋ช ๋ฒ์งธ์ธ์ง์ ๋ํ ์ ๋ณด๋ก ์๋ณํ ์ ์๊ฒ ์ถ์ํํ ๋ค์ ์ค์ฒฉ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ํํํ๋ค. ์ด์ ์ ์๋ง ์ฌ์ฉ๋๋ฉฐ, ๋ ์ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ ๋ ์๋ฐฉํฅ์์ ๊ฐ๋๋ก ํํํ๊ธฐ๊ฐ ๋ ์ฌ์์ก๋ค.
[[0, 3, 5, -1], [3, 0, -1, 4], [5, -1, 0, 7], [-1, 4, 7, 0]]
๋ฆฌ์คํธ ๋ด์ ๊ฐ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๋ ๋ช ๋ฒ์งธ ์ ์ ์ ์ ๋ณด์ธ์ง๋ฅผ ๋ํ๋ด๊ณ , ์ค์ฒฉ๋ ๋ฆฌ์คํธ์์์ ์ธ๋ฑ์ค๋ ์ ์ ์์ ๋ค๋ฅธ ๋ช ๋ฒ์งธ ์ ์ ๊ณผ์ ๊ฑฐ๋ฆฌ์ธ์ง๋ฅผ ๋ํ๋ธ๋ค. ์ ์ค์ฒฉ ๋ฆฌ์คํธ์ 0๋ฒ์งธ ์ธ๋ฑ์ค(์ ์ A)์ ๋ฆฌ์คํธ [0, 3, 5, -1] ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค:
A ์ A ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ 0์ด๋ค. (์ฒซ ๋ฒ์งธ (0๋ฒ์งธ ์ธ๋ฑ์ค = A๊น์ง์ ๊ฑฐ๋ฆฌ) 0)
A ์ B ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ 3์ด๋ค. (๋ ๋ฒ์งธ (1๋ฒ์งธ ์ธ๋ฑ์ค = B ๊น์ง์ ๊ฑฐ๋ฆฌ) 3)
A ์ C ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ 5์ด๋ค. (์ธ ๋ฒ์งธ (2๋ฒ์งธ ์ธ๋ฑ์ค = C ๊น์ง์ ๊ฑฐ๋ฆฌ) 5)
A ์ D ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ ์กด์ฌํ์ง ์๋๋ค. (๋ค ๋ฒ์งธ (3๋ฒ์งธ ์ธ๋ฑ์ค = D ๊น์ง์ ๊ฑฐ๋ฆฌ) -1)
์ด์ฒ๋ผ ์ ์ ๋ค ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์๋ ๊ฒ์ -1๋ก ํํํ๋ค. ์ค์ฒฉ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด๋ ์ ์ ์ ๊ฐฏ์์ ๊ฐ๋ค.
๐ ๊ทธ ์ธ ํ์ํ ์๋ฃ ๊ตฌ์กฐ๋ค
๋ค์ํ ์๋ฃ ๊ตฌ์กฐ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ์ง๋ง, ๊ทธ ์ค ๊ฐ์ฅ ์ ํฉํ ์๋ฃ ๊ตฌ์กฐ๋ ์ฌ์ฉ๋๋ ๋งฅ๋ฝ๊ณผ ์ฉ๋๋ฅผ ๊ณ ๋ คํด์ ๊ฒฐ์ ๋๋ค. ์ด์ ๋ค๋ฅธ ์ ๋ณด๋ค์ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ๋ค์๋ ๋ฌด์์ด ์ฌ์ฉ๋์ด์ผ ํ๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉํ ๊ฒ์ธ์ง ์๊ฐํด๋ณด์.
๋๋จธ์ง ์์์ผ ํ ์ ๋ณด๋ค๊ณผ ๊ฐ ์ ๋ณด๊ฐ ์ ์ฅ๋ ์ ์๋ ๋ฐฉ์์ ์ ๋ฆฌํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค:
์์์ผ ๋๋ ์ ๋ณด | ์ ์ฅ๋๋ ๋ฐฉ์ |
์์์ ์ผ๋ก๋ถํฐ ๋ชจ๋ ์ ์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ค ๊ฐ๊ฐ์ ๊ฐ | int[] dist ๋ณด๋ค๋ List<Integer> dist: ๋ณ๋์ด ์ฆ๊ธฐ ๋๋ฌธ์ด๋ค. |
ํ์ฌ ๋ฐฉ๋ฌธ ์ค์ธ ์ ์ ๊ฐ | int current : ์ ์ ์ด ๋ช ๋ฒ์งธ์ธ์ง์ ๋ํ ์ธ๋ฑ์ค๋ก ์ ์ฅํ๋ค. |
์ง๊ธ๊น์ง ๋ฐฉ๋ฌธ๋์ด์ง ๋ชจ๋ ์ ์ ๋ค์ ๊ฐ | List<Integer> visited: ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๋์ด ์ฆ๋ค. |
์์ง๊น์ง ๋ฐฉ๋ฌธ๋์ง ์์ ๋ชจ๋ ์ ์ ๋ค์ ๊ฐ | List<Integer> unvisited: ๋ณ๋์ด ์ฆ๋ค. |
๋ง์ ์์ฑํด๋ณด๋, ๋ฐฉ๋ฌธ๋์ด์ง ์ ์ ๋ค๊ณผ ๋ฐฉ๋ฌธ๋์ด์ง์ง ์์ ์ ์ ๋ค์ ์ ๋ณด๋ ํ๋๋ก ํฉ์น ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ด์ฐจํผ ์ ์ ์ ์ธ๋ฑ์ค ๊ฐ์ ํตํด ํ์ ํ๋ฏ๋ก, ๋ถ๋ฆฐ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํด ์ฒ์์๋ ๋ชจ๋ ๋ฐฉ๋ฌธ๋์ด์ง์ง ์์๋ค๋ ์๋ฏธ์์ ๋ชจ๋ ์ธ๋ฑ์ค์ ๊ฐ์ false ๋ก ์ด๊ธฐํํ๊ณ , ์ดํ N๋ฒ์งธ ์ ์ ์ด ๋ฐฉ๋ฌธ๋์์ผ๋ฉด ๋ฆฌ์คํธ์ N๋ฒ์งธ๋ฅผ true๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ ํ์ ๋งจ ์๋ ๋ ์ ์ ํฉ์ณ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ์๋ค.
์์์ผ ๋๋ ์ ๋ณด | ์ ์ฅ๋๋ ๋ฐฉ์ |
์ง๊ธ๊น์ง ๋ฐฉ๋ฌธ๋์ด์ง / ๋ฐฉ๋ฌธ๋์ง ์์ ๋ชจ๋ ์ ์ ๋ค์ ๊ฐ | List<Boolean> visitedInfo |
๐งฑ ๋์ ์๋ฆฌ
์ง๊ธ๊น์ง ์ ๋ฆฌํ ๋ฐ์ ์ํ๋ฉด, ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค:
- ์ค์ฒฉ ๋ฆฌ์คํธ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
- visitedInfo ๋ฆฌ์คํธ์์ ๊ฐ ์์๋ฅผ ์ค์ฒฉ ๋ฆฌ์คํธ์ ๋ช ์๋ ์ ๋ณด์ ๋ฐ๋ผ ๋ฐฉ๋ฌธํ๋ฉด์ true ๋ก ๋ฐ๊พผ๋ค.
- current ์๋ ํ์ฌ ๋ฐฉ๋ฌธ ์ ์ ์ ์ธ๋ฑ์ค๋ฅผ ํ ๋นํ๋ค.
- dist ๋ฆฌ์คํธ๋ ํ์ฌ ์์์ ์ ์ฌ์ ์ผ๋ก ๋ฐ๋ ์ ์๋ ์์์ ํฌ๊ธฐ ๋น๊ต๋ฅผ ํตํด ์ ๋ฐ์ดํธ ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋๋ค.
๐ ๊ฒฐ๋ก
์ด์ ์ ๋ฒ ํฌ์คํธ์์ ์ค๋ช ํ ๋จ๊ณ์ ๋ฐ๋ผ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด๋ณด์.
๋ค์ ํฌ์คํธ์์๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๊ตฌํํด๋ณธ๋ค.
'Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] Longest Common Subsequence(LCS) - 1๋ถ (0) | 2022.12.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค - ๋์คํฌ ์ปจํธ๋กค๋ฌ 1๋ถ (1) | 2022.12.08 |
[์๊ณ ๋ฆฌ์ฆ] Dijkstra's algorithm 1๋ถ - ์ด๋ก (0) | 2022.12.04 |
[์๊ณ ๋ฆฌ์ฆ] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (0) | 2022.12.03 |
[์๊ณ ๋ฆฌ์ฆ] Fibonacci sequence (0) | 2022.11.23 |
- Total
- Today
- Yesterday
- Jackson
- Java Data Types
- ์ฝํ
- ๊ธฐ์ง๊ตญ ์ค์น
- spring
- docker
- JPQL
- gitlab
- ๊ฐ์ ์๋ฒ
- ์ค์๊ฐ๋ฐ์ดํฐ
- FCM
- JOIN FETCH
- N+1
- ci/cd
- ์ง์ฐ ๋ก๋ฉ
- ๋์ปค
- DeSerialization
- ์ญ์ง๋ ฌํ
- ์ธ์ฆ/์ธ๊ฐ
- google cloud
- json web token
- JPA
- LazyInitializationException
- Firebase
- ์๊ณ ๋ฆฌ์ฆ
- DTO
- ๊น๋ฉ
- @RequestBody
- Spring Boot
- ํ๋ก๊ทธ๋๋จธ์ค
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |