ํฐ์คํ ๋ฆฌ ๋ทฐ
[๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ] ํ ์ด๋ ์ดํดํ๋ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
10000COW 2022. 12. 5. 11:51๋ค์ด๊ฐ๊ธฐ ์ ์
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ธฐ ์ํด ์ฌ๋ฌ ์ ํ๋ธ์ ๋ธ๋ก๊ทธ๋ฅผ ๋ฐฉ๋ฌธํ์๋๋ฐ ๋์ฒด๋ก ์ค๋ช ์ด ์ด๋ ต๊ฑฐ๋ ์๋ต์ด ๋ง๋ค.. ์ฝ๋ ์ค๋ช ๋ ์์ธํ์ง ์์ ์์ฌ์์ด ์์๋ค. (ํนํ, ๋ธ๋ก๊ทธ์ ์๋ ํ๋ ๊ทธ๋ฆผ์ ์์ด๋ ๊ฒ ๋ฑ๋ฑํ๊ฑธ๊น.. ์ ๋ชจ๋ฅด๋ ์ฌ๋์๊ฒ ๊ฑฐ๋ถ๊ฐ์ด ๋ ๋ค)
์ง์ ํ๋ํ๋ ๊ทธ๋ ค๊ฐ๋ณด๋ฉฐ ์ดํดํ ๋์ ๊นจ๋ฌ์์ ๋ค๋ฅธ ๋ถ๋ค๊ป ์์ธํ๊ณ ์ฝ๊ฒ, ๋ง์น ์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๋ ์ด๋ฆฐ ์์ด์๊ฒ ์ค๋ช ํ๋ฏ์ด ์ค๋ช ํด๋ณด๋ ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๊ฐ์ด ์ง๋๋ฉด ์์ด๋ฒ๋ฆฌ๋ ๋ฏธ๋์ ๋๋ฅผ ์ํ์ฌ ์์ธํ ๊ธฐ์ ํด๋ณด์๋ค.
์์ธํ ์์๋ถํฐ ์ ์ ๊ณผ์ ์ ์ถ์ํํด๋๊ฐ๋ฏ๋ก ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด๋?
๊ทธ๋ํ์ ํ ์ ์ (Vertex ๋๋ Node)์์ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ์ ์ฌ์ฉ๋๋ค.
๊ทธ๋ํ ๋ฐฉํฅ์ ์ ๋ฌด๋ ์๊ด ์์ผ๋, ๊ฐ์ (Edge)๋ค ์ค ๋จ ํ๋๋ผ๋ ๊ฐ์ค์น๊ฐ ์์์ด๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
ํต์ฌ์ ์ถ๋ฐ์ง์์ ๋์ฐฉ์ง๊น์ง์ ๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค!
์ฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์กด์ฌํ๋ค๊ณ ํ์.
(์ด ๊ทธ๋ํ๋ 'EBS แ แ ตแผแแ ณ แแ ฉแแ ณแแ ณแแ ฐแแ ฅ แแ ฆแแ กแผ, "แแ กแแ กแผ แแ กแ แ ณแซแแ ตแฏแแ ณแฏ แแ กแฝแแ กแ แ ก, แแ ฌแแ กแซแแ งแผแ แ ฉ แแ กแฏแแ ฉแ แ ตแแ ณแท"'์์ ๋์ค๋ ๊ทธ๋ํ์ ๊ฐ๋ค. ๋์์ ์ค๋ช ์ด ๋ฃ๊ณ ์ถ์ผ๋ฉด ์ด ์ ๋ชฉ์ผ๋ก ์ ํ๋ธ์์ ๊ฒ์ํด๋ณด๋ฉด ์ดํด์ ๋์์ด ๋๋ค.)
์ถ๋ฐ์ง๋ '์ง' ์ด๊ณ ,
๋์ฐฉ์ง๋ 'ํ๊ต' ์ด๋ค.
์ถ๋ฐ์ง๋ถํฐ ๊ฐ ์์น์ ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํ ํ๋ฅผ ํ๋ ์ฌ์ฉํ ๊ฒ์ด๋ค.
ํธ์๋ฅผ ์ํด์ ์ด ํ๋ฅผ distance๋ผ๊ณ ๋ถ๋ฅด๊ฒ ๋ค.
์ง๊ธ๊น์ง ์ฐ๋ฆฌ์๊ฒ ๊ทธ๋ํ์, distance๊ฐ ์ฃผ์ด์ก๋ค.
์์ผ๋ก ๊ฐ ๋ ธ๋๋ค์ ๋์๋ค๋๋ฉด์
1. ๋ฐ๋ก ์ด์ํ ๋ ธ๋๋ค๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
2. ์ง๊ธ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ์ ๋น๊ตํด์, ๋ ์์ ๊ฐ์ distance์ ๋ฃ์ด์ค๋ค.
์ฐ์ ์ ๊ฐ์ฅ ์ฒ์ ๊ฑฐ๋ฆฌ๋ฅผ distance์ ๋ฃ์ ๋๋ ์ด๋ค ๊ฐ์ด๋ผ๋ ๋ค์ด๊ฐ ์ ์๋๋ก ๊ฐ์ฅ ํฐ ๊ฐ์ธ ๋ฌดํ๋๋ก ์ด๊ธฐํ๋ฅผ ํด๋์.
์ถ๋ฐ์ง์์ ์ถ๋ฐ์ง๊น์ง๋ ๊ฑฐ๋ฆฌ๊ฐ 0์ด๋ฏ๋ก ์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
์ง๊ธ๊น์ง ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๋ค์ ์ฐ๋์์ผ๋ก ํ์ํด๋๋ค.
Cycle 1
์ฐ์ ์ถ๋ฐ์ง๋ถํฐ ์์ํด๋ณด์.
ํ์ฌ ๋ ธ๋: ๋ฏธ์ฉ์ค
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ง์์ ๊ฐ ์ ์๋ ์ด์ํ ๋ ธ๋๋ค์ '๋ฏธ์ฉ์ค', '์ํผ๋ง์ผ' '์์ดํ์'์ด๋ค.
๋นจ๊ฐ์ ์ ์ด ํ์ฌ ์ด์ํ ๋ ธ๋๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฏธ์ฉ์ค์ 5, ์ํผ๋ง์ผ์ 10, ์์ดํ์์ 9๋ฅผ ๊ฐ์ง๋ค.
์ฐ๋ฆฌ๋ distance์ ์ถ๋ฐ์ง๋ก๋ถํฐ ๊ฐ ๋ ธ๋๋ค๋ก ๊ฐ๋ '์ต๋จ๊ฑฐ๋ฆฌ'๋ฅผ ๊ธฐ๋กํ๊ณ ์์์ ์์ง ๋ง์์ผ ํ๋ค.
์ง์ ๊ฑฐ์ณ๊ฐ๋ ๊ฑฐ๋ฆฌ๊ฐ(์๋ฅผ๋ค์ด ๋ฏธ์ฉ์ค๊น์ง ๊ฑฐ๋ฆฌ๊ฐ 5) ํ์ฌ distance์ ์๋ ๋ ธ๋๋ค์ ์ต๋จ๊ฑฐ๋ฆฌ(์๋ฅผ๋ค์ด ํ์ฌ distance์์ ๋ฏธ์ฉ์ค๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ๋ ๋ฌดํ๋)๋ณด๋ค ์์ผ๋ฏ๋ก, distance ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์์ ํด์ค๋ค.
์ด์ ์ง์์ ๊ฐ ์ ์๋ ์ด์๋ ธ๋๋ค์ ๋ชจ๋ ๊ฐ๋ดค๋ค.
์ด์ ์ง ๋ ธ๋๋ ๋ฐฉ๋ฌธํ๊ณ , ๋ค์์ผ๋ก ์ด๋ค ์์น ๋ ธ๋๋ก ๊ฐ์ผํ ๊น? ๋ฏธ์ฉ์ค๋ก ๊ฐ์ผํ ๊น ๋๋ ์ํผ๋ง์ผ์ผ๋ก ๊ฐ์ผํ ๊น..?
์ด ๋ถ๋ถ์ด ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋๋ฐ ์ค์ํ ํฌ์ธํธ๋ค. (๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋๋ฐ ์์ด ํ์๋ ๊ฐ์ฅ ํท๊ฐ๋ ธ๋ค.)
ํด์ผํ ํ๋์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
" distance์์ ๋ฐฉ๋ฌธํ์ง ์์๋ ๋ ธ๋ ์ค์ '๊ฐ์ฅ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์์' ๋ ธ๋๋ก ์ด๋ํ๋ค."
์ฆ, distance์์ ์ง์ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋์ด๋ ์ ์ธํ๊ณ , ๋๋จธ์ง์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ๋ ๋ฏธ์ฉ์ค์ด ๋ค์ ๋ ธ๋๊ฐ ๋๋ค.
์ดํ์๋, ๋ฐ๋ก ์ ๋ถ๋ถ์์ ์ง ๋ ธ๋์์ ํ๋ ๊ฒ ์ฒ๋ผ! ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ๊ณ ๊ฐฑ์ ํ๋ ๋๊ฐ์ ๊ณผ์ ์ ์ํํด์ฃผ๋ฉด ๋๋ค.
Cycle 2
ํ์ฌ ๋ ธ๋: ๋ฏธ์ฉ์ค
์ด์ ๋ฏธ์ฉ์ค๋ก ๋ค์ ์ฌ์ดํด์ด ๋ฐ๋ณต๋๋ค. ์ง์์ ํ๋ ๊ฒ์ฒ๋ผ ๋๊ฐ์ด ๋ฐ๋ณต๋๋ ์ ๋ฐ๋ผ์๋ณด์.
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฏธ์ฉ์ค์์ ๊ฐ ์ ์๋ ์ด์ ๋ ธ๋๋ค์ '์ํผ๋ง์ผ' '์ํ'์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ํผ๋ง์ผ์ 8(5 + 3), ์ํ์ 16(5 + 11)์ ๊ฐ์ง๋ค.
์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ด ์ด์ ๋ ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋
'์ถ๋ฐ์ง๋ถํฐ ๋ฏธ์ฉ์ค๊น์ง์ ํ์ฌ ์ต๋จ๊ฑฐ๋ฆฌ + ๋ฏธ์ฉ์ค๋ถํฐ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ' ๋ฅผ ๊ตฌํ๋ค๋ ๊ฒ์ด๋ค!=(์ถ๋ฐ์ง~๋ฏธ์ฉ์ค)+(๋ฏธ์ฉ์ค~์ด์๋ ธ๋)
์ฐ๋ฆฌ๋ '์ถ๋ฐ์ง'๋ถํฐ ๊ฐ ๋ ธ๋๊น์ง '์ต๋จ๊ฑฐ๋ฆฌ'๋ฅผ distance ํ์ ๊ธฐ๋กํ๊ณ ์์์ ์์ง ๋ง์์ผ ํ๋ค.
์ถ๋ฐ์ง(์ง)์์ ํ์ฌ ๋ ธ๋(๋ฏธ์ฉ์ค)์ ๊ฑฐ์ณ ์ด์ ๋ ธ๋(์ํผ๋ง์ผ)์ ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ๋ ค๋ฉด,
'์ถ๋ฐ์ง๋ถํฐ ๋ฏธ์ฉ์ค๊น์ง์ ํ์ฌ ์ต๋จ๊ฑฐ๋ฆฌ (distance[๋ฏธ์ฉ์ค]) + ๋ฏธ์ฉ์ค์์ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ ๊ฐ'
VS
'ํ์ฌ ์ด์ ๋ ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ (distance[์ํผ๋ง์ผ])' ๋ฅผ ๋น๊ตํด์ผ ํ๋ค.
์ด ๋ ๊ฐ์ค ๋ ์์ ๊ฐ์ด ํ์ฌ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ์ด๋ฏ๋ก, ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ distance์ ๊ธฐ๋กํด์ฃผ๋ฉด ๋๋ค.
'์ถ๋ฐ์ง๋ถํฐ ๋ฏธ์ฉ์ค๊น์ง์ ํ์ฌ ์ต๋จ๊ฑฐ๋ฆฌ (distance[๋ฏธ์ฉ์ค]) + ๋ฏธ์ฉ์ค์์ ์ํผ๋ง์ผ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ ๊ฐ' ์ฆ, ์ถ๋ฐ์ง๋ถํฐ ๋ฏธ์ฉ์ค์ ๊ฑฐ์ณ ์ํผ๋ง์ผ๊น์ง ๊ฐ๋ ๊ฑฐ๋ฆฌ๊ฐ
'ํ์ฌ๊น์ง ์ํผ๋ง์ผ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ'๋ณด๋ค ์์ผ๋ฏ๋ก => ์ํผ๋ง์ผ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ 8๋ก ๋ฐ๊ฟ์ค๋ค.
์ํ๋ ์ด์๋ ธ๋์ด๋ฏ๋ก ํ ๋ฒ ํด๋ณด์.
์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ๊ณ ๊ฐฑ์ ํ๋ ๋๊ฐ์ ๊ณผ์ ์ ์ํํด์ฃผ๋ฉด ๋๋ค.
์ด์ ์ด์ ๋ ธ๋๋ค์ distance ๋น๊ต์ ๊ฐฑ์ ์ด ๋๋๋ฉด, ์์ '์ง'์์ ํ๋ ๊ฒ์ฒ๋ผ
" distance์์ ๋ฐฉ๋ฌธํ์ง ์์๋ ๋ ธ๋ ์ค์ '๊ฐ์ฅ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์์' ๋ ธ๋๋ก ์ด๋ํ๋ค."
distance์์ ์ง๊ธ๊น์ง ๋ฐฉ๋ฌธํ๋ ์ง๊ณผ ๋ฏธ์ฉ์ค์ ์ ์ธํ ๋ ธ๋๋ค ์ค, ์ํผ๋ง์ผ์ด ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ฏ๋ก ๋ค์ ๋ ธ๋๋ ์ํผ๋ง์ผ์ด๋ค!
Cycle 3
ํ์ฌ ๋ ธ๋: ์ํผ๋ง์ผ
์, ์ง๊ธ ๋ถํฐ๋ ์กฐ๊ธ ๊ฐ๋ตํ์ง๋ง ํฐ ํ๋ฆ์ ๋ณด์.
์์์ ํ๋ ๊ฒ๊ณผ ์ ํํ ๋๊ฐ๋ค.
1. ์ถ๋ฐ์ง๋ถํฐ ์ํผ๋ง์ผ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ + ์ํผ๋ง์ผ์์ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ vs ์ถ๋ฐ์ง๋ถํฐ ์ด์ ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ ๋น๊ต,
๋ ์์ ๊ฐ์ distance์ ๊ฐฑ์
2. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ค ์ค distance์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ก ์ด๋
์ ๋ฐ๋ณต์ด๋ค!
Cycle 4
ํ์ฌ ๋ ธ๋: ์์ดํ์
1. ์ถ๋ฐ์ง๋ถํฐ ํ์ฌ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ + ํ์ฌ๋ ธ๋์์ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ vs ์ถ๋ฐ์ง๋ถํฐ ์ด์ ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ ๋น๊ต,
๋ ์์ ๊ฐ์ distance์ ๊ฐฑ์
2. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ค ์ค distance์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ก ์ด๋
Cycle 5
ํ์ฌ ๋ ธ๋: ๋ ์คํ ๋
1. ์ถ๋ฐ์ง๋ถํฐ ํ์ฌ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ + ํ์ฌ๋ ธ๋์์ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ vs ์ถ๋ฐ์ง๋ถํฐ ์ด์ ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ ๋น๊ต,
๋ ์์ ๊ฐ์ distance์ ๊ฐฑ์
2. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ค ์ค distance์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ก ์ด๋
Cycle 6
ํ์ฌ ๋ ธ๋: ์ํ
1. ์ถ๋ฐ์ง๋ถํฐ ํ์ฌ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ + ํ์ฌ๋ ธ๋์์ ์ด์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ vs ์ถ๋ฐ์ง๋ถํฐ์ด์ ๋ ธ๋๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ ๋น๊ต, ๋ ์์ ๊ฐ์ distance์ ๊ฐฑ์
2. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ค ์ค distance์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋๋ก ์ด๋
์ฐ๋ฆฌ์๊ฒ ์ฃผ์ด์ก๋ ๋ ธ๋๋ ์ด 7๊ฐ,
๋์ฐฉ์ง ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ด๋ํ์ง ์์ผ๋ฏ๋ก ์ด 6๋ฒ์ ์ฌ์ดํด์ด ๋ฐ๋ณต๋๋ค.
์ฐ๋ฆฌ๋ ์ต์ข distance๋ฅผ ํตํด ์ถ๋ฐ์ง๋ถํฐ ๊ฐ ๋ ธ๋๋ค๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์์๋ค.
์ด๋ฅผ Python ์ฝ๋๋ก ๊ตฌํํด๋ณด์!
์ฐ์ , ๊ทธ๋ํ๋ฅผ ์ฝ๋๋ก ํํํ๊ธฐ ์ํด์ Dictionary๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ ๋ ธ๋๋ค๋ก๋ถํฐ ์ด์ํ ๋ ธ๋๋ค๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ํํํ๊ณ ์๋ค.
graph = {
'์ง': {'๋ฏธ์ฉ์ค': 5, '์ํผ๋ง์ผ': 10, '์์ดํ์': 9},
'๋ฏธ์ฉ์ค': {'์ํผ๋ง์ผ': 3, '์ํ': 11},
'์ํผ๋ง์ผ': {'๋ ์คํ ๋': 3, '์ํ': 10, '์์ดํ์': 7},
'์์ดํ์': {'์ํ': 7, 'ํ๊ต': 12},
'๋ ์คํ ๋': {'์ํ': 4},
'์ํ': {'ํ๊ต': 2},
'ํ๊ต': {}
}
์ฌ๊ธฐ์ ์ฌ์ฉ๋ ํต์ฌ์ ์ธ ์๋ฆฌ๋ฅผ ์ง๊ณ ์ฝ๋๋ฅผ ์ฝ์ด๋ณด๋ฉด ์ดํด๊ฐ ๋ ์ฌ์ธ ๊ฒ์ด๋ค.
1. ๋งค๊ฐ๋ณ์๋ก graph์ ์ถ๋ฐ์ง(start)๊ฐ ๋ค์ด์จ๋ค.
2. distance๋ dictionary๋ก ๊ตฌํํ๋ค.
3. ์ฐ์ ์์ ํ(min heap)์ ์ฌ์ฉํด ' ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ค ์ค distance์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ๋ ธ๋'๋ฅผ ๊ตฌํ๋ค.
import heapq
def dijkstra(graph, start):
distance = {node: float('inf') for node in graph}
distance[start] = 0
queue = []
# start๋ถํฐ ์์ํ๊ธฐ ์ํด queue์ start ๋ฃ์ด์ค๋ค.
heapq.heappush(queue, [distance[start], start])
print("distance",distance)
print("visited",visited)
print("----start----")
# queue์ ๋จ์ ์๋ ๋
ธ๋๊ฐ ์์ ๋ ๊น์ง ๋ฐ๋ณต
while queue:
# ํ์ ํ ๋
ธ๋, ๊ฑฐ๋ฆฌ๋ฅผ queue์์ ๊บผ๋ด์จ๋ค. (์ต์ cur_dist๋ฅผ ๊ฐ๋ ๋
ธ๋)
cur_dist, cur_node = heapq.heappop(queue)
print(f'cur_dist: {cur_dist}, cur_node: {cur_node}')
# cur_dist๊ฐ์ด 'ํ์ฌ๊น์ง cur_node์ ์ต๋จ๊ฑฐ๋ฆฌ'๋ณด๋ค ํฌ๋ฉด continue๋ก ์ง๋๊ฐ๋ค.
if(cur_dist > distance[cur_node]):
print("continue")
continue
for neighbor in graph[cur_node]:
# 'cur_node๋ฅผ ๊ฑฐ์ณ์ neighbor๊น์ง ๊ฐ๋ ๊ฑฐ๋ฆฌ'์ 'ํ์ฌ๊น์ง neighbor๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ'๋ฅผ ๋น๊ตํด์ ๋ ์์ ๊ฒ์ผ๋ก distance ์ค์
if( distance[cur_node] + graph[cur_node][neighbor] < distance[neighbor]):
distance[neighbor] = distance[cur_node] + graph[cur_node][neighbor]
# distance๊ฐ ๋ณ๊ฒฝ๋์์ผ๋ฉด, ๊ทธ ๊ฐ์ผ๋ก queue์ ๋ฃ์ด์ค๋ค.
heapq.heappush(queue, [distance[cur_node] + graph[cur_node][neighbor], neighbor])
print(queue)
print(distance)
์ถ๋ ฅ ๊ณผ์ ๋ฐ ๊ฒฐ๊ณผ
'๐ง๐ปโ๐ป ์๊ณ ๋ฆฌ์ฆ > ๊ทธ๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- ์๋ฌ
- ๋ธ๋ผ์ฐ์
- react
- React Query
- Context API
- zustand
- github
- useState
- CSS
- ์๋ฃ๊ตฌ์กฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- BOJ
- DB
- leetcode
- ํจ์
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฆฌ์กํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- error
- mdn
- Browser
- Component
- state
- Python
- DOM
- ์ ๋ ฌ
- git
- ํ์ด์ฌ
- ๊ทธ๋ํ
- JavaScript
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |