Skip to content

Conversation

@dohyeondol1
Copy link
Contributor

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

Gold 2 ํ”Œ๋กœ์ด๋“œ

โœ”๏ธ ์†Œ์š”๋œ ์‹œ๊ฐ„

20๋ถ„

โœจ ์ˆ˜๋„ ์ฝ”๋“œ

์ˆ˜๋„ ์ฝ”๋“œ
1. n(๋„์‹œ ์ˆ˜), m(๋ฒ„์Šค ์ˆ˜) ์ž…๋ ฅ๋ฐ›๊ธฐ

2. ๊ฑฐ๋ฆฌ ๋ฐฐ์—ด dist[n+1][n+1]์„ INF๋กœ ์ดˆ๊ธฐํ™”
  - INF = 1e9 (๋ฌดํ•œ๋Œ€ ๊ฐ’)

3. ์ž๊ธฐ ์ž์‹ ์œผ๋กœ์˜ ๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ์„ค์ •
  - for i = 1 to n:
      dist[i][i] = 0

4. m๊ฐœ์˜ ๋ฒ„์Šค ์ •๋ณด ์ž…๋ ฅ๋ฐ›๊ธฐ
  - for i = 0 to m-1:
      a, b, c ์ž…๋ ฅ (์ถœ๋ฐœ, ๋„์ฐฉ, ๋น„์šฉ)
      dist[a][b] = min(dist[a][b], c)  // ์ค‘๋ณต ๊ฐ„์„  ์ฒ˜๋ฆฌ

5. ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰
  - for k = 1 to n:           // ๊ฒฝ์œ ์ 
      for i = 1 to n:         // ์‹œ์ž‘์ 
          for j = 1 to n:     // ๋„์ฐฉ์ 
              if dist[i][k] != INF and dist[k][j] != INF:
                  dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])

6. ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  - for i = 1 to n:
      for j = 1 to n:
          if dist[i][j] == INF:
              ์ถœ๋ ฅ 0
          else:
              ์ถœ๋ ฅ dist[i][j]

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์ •์  ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ(Floyd-Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•ํ•˜๊ณ  ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ต์ŠคํŠธ๋ผ๋Š” ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—ˆ๋‹ค๋ฉด, ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋™์  ๊ณ„ํš๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

img

gif ์ถœ์ฒ˜ : [์•Œ๊ณ ๋ฆฌ์ฆ˜] Floyd-Warshall Algorithm : ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

์ฝ”๋“œ์—์„œ ์‰ฝ๊ฒŒ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for(int k = 1; k <= n; k++)
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            if(dist[i][k] != INF && dist[k][j] != INF)
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);

๋˜๊ฒŒ ์ง๊ด€์ ์ด์ฃ ?
"i์—์„œ j๋กœ ์ง์ ‘ ๊ฐ€๋Š” ๊ฒƒ vs k๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๋Š” ๊ฒƒ ์ค‘ ๋” ์งง์€ ๊ฒฝ๋กœ๋กœ ์—…๋ฐ์ดํŠธ" ํ•˜๋Š” ๊ณผ์ •์„ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์œ ์ ์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
์‚ผ์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ปค์ ธ์„œ ํฐ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์จ๋ด๋ผ~! ํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—
์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์šด ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ vs ๋‹ค์ต์ŠคํŠธ๋ผ:

  • ๋‹ค์ต์ŠคํŠธ๋ผ: ํ•˜๋‚˜์˜ ์‹œ์ž‘์  โ†’ ๋ชจ๋“  ์  $(O(nยฒlog n))$
  • ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ: ๋ชจ๋“  ์  โ†’ ๋ชจ๋“  ์  $(O(nยณ))$

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants