1๊ฐ•: ๐Ÿš€ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์„œ ์Œ์‹ ๋ฐฐ๋‹ฌ!

3 minute read

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋˜๋Š” [EXAONE 3.5 32B AI] ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (5๋…„ ์ฐจ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ AI ๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค!) ํ•ด๋‹น ๋ธ”๋กœ๊ทธ์˜ ๊ฒฝ์šฐ ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ค„ ์‹œ์— ์ž๋™์œผ๋กœ Gemini AI ๊ฐ€ ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ค๋‹ˆ๋‹ค.


1๊ฐ•: ๐Ÿš€ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์„œ ์Œ์‹ ๋ฐฐ๋‹ฌ!

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

๐ŸŽ‰ ๋ฌธ์ œ ์ƒํ™ฉ: ์Œ์‹ ๋ฐฐ๋‹ฌ์˜ ์‹ ์ด ๋˜์ž!

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

๊ตฌ์ฒด์ ์ธ ๋ฌธ์ œ:

  • ๋„์‹œ ์ง€๋„: 5๊ฐœ์˜ ๋…ธ๋“œ(A, B, C, D, E)๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  • ์‹œ์ž‘ ์œ„์น˜: A (์ฃผ๋ฌธ์ž ์ง‘)
  • ๋ชฉ์ ์ง€: E (์‹๋‹น)
  • ๋น„์šฉ ํ–‰๋ ฌ: ๊ฐ ๋…ธ๋“œ ๊ฐ„์˜ ์ด๋™ ๋น„์šฉ(์‹œ๊ฐ„)์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ–‰๋ ฌ

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ๋น„์šฉ ํ–‰๋ ฌ์ด ์ฃผ์–ด์กŒ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค:

๋น„์šฉ ํ–‰๋ ฌ:
   | A  B  C  D  E
--|------------
A | 0  2  5  1  โˆž
B | 2  0  3  4  โˆž
C | 5  3  0  2  โˆž
D | 1  4  2  0  3
E | โˆž  โˆž  โˆž  3  0

(์—ฌ๊ธฐ์„œ โˆž๋Š” ์ง์ ‘ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)

๋ชฉํ‘œ: A์—์„œ E๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ , ๊ทธ ๊ฒฝ๋กœ์™€ ์ด ๋น„์šฉ์„ ์ถœ๋ ฅํ•˜์„ธ์š”.

๐Ÿ“š ๊ฐœ๋… ์„ค๋ช…: ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋น„๋ฐ€

์™œ ํ•„์š”ํ• ๊นŒ์š”?

  • ์ตœ์  ๊ฒฝ๋กœ ์ฐพ๊ธฐ: ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์šฉ์„ฑ: ๊ตํ†ต ๋„คํŠธ์›Œํฌ, ๋„คํŠธ์›Œํฌ ๋ผ์šฐํŒ…, GPS ๊ฒฝ๋กœ ์ฐพ๊ธฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์ตœ์ ํ™”๋œ ๋ฒ„์ „: ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ (O((V + E) \log V)), ์—ฌ๊ธฐ์„œ (V)๋Š” ๋…ธ๋“œ์˜ ์ˆ˜, (E)๋Š” ์—ฃ์ง€์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„: (O(V^2))๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํฐ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ํšจ์œจ์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ดˆ๋ณด์ž ํญํ’ ์งˆ๋ฌธ!

  • Q: ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋ญ”๊ฐ€์š”?
    • A: ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๊ฐ ์š”์†Œ๊ฐ€ ํŠน์ • ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ˆ์š”. ๊ฐ€์žฅ ๋‚ฎ์€ ๋น„์šฉ(๋˜๋Š” ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„)์˜ ๋…ธ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค. ๋งˆ์น˜ ์‹๋‹น์—์„œ ์ฃผ๋ฌธ์„ ๋ฐ›์„ ๋•Œ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ด์š”!

๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

์ ‘๊ทผ ๋ฐฉ๋ฒ•

  1. ์ดˆ๊ธฐํ™”: ์‹œ์ž‘ ๋…ธ๋“œ(A)์˜ ๋น„์šฉ์„ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ์˜ ๋น„์šฉ์„ ๋ฌดํ•œ๋Œ€๋กœ ์„ค์ •.
  2. ์šฐ์„ ์ˆœ์œ„ ํ: ํ˜„์žฌ ๋…ธ๋“œ์™€ ๊ทธ ๋น„์šฉ์„ ์ €์žฅํ•˜๋Š” ํ๋ฅผ ์‚ฌ์šฉ.
  3. ๋ฐ˜๋ณต:
    • ํ์—์„œ ๋น„์šฉ์ด ๊ฐ€์žฅ ์ž‘์€ ๋…ธ๋“œ๋ฅผ ๊บผ๋ƒ„.
    • ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์„ ์ˆœํšŒํ•˜๋ฉฐ, ๋” ์งง์€ ๊ฒฝ๋กœ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ์—…๋ฐ์ดํŠธ.
    • ์—…๋ฐ์ดํŠธ๋œ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ํ์— ๋„ฃ์Œ.
  4. ์ข…๋ฃŒ ์กฐ๊ฑด: ๋ชฉ์ ์ง€ ๋…ธ๋“œ(E)์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜, ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต.
๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ๋ฐ ์ •๋‹ต ์ฝ”๋“œ ๋ณด๊ธฐ (ํด๋ฆญ)

๐Ÿ› ๏ธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ๊ฐ€์ด๋“œ (์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„)

  1. ๋น„์šฉ ํ–‰๋ ฌ ์ดˆ๊ธฐํ™”: ์‹œ์ž‘ ๋…ธ๋“œ์˜ ๋น„์šฉ์„ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋ฌดํ•œ๋Œ€๋กœ ์ดˆ๊ธฐํ™”.
  2. ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ: ํŒŒ์ด์ฌ์˜ heapq ๋ชจ๋“ˆ์„ ํ™œ์šฉํ•ด ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„.
  3. ๊ฒฝ๋กœ ์ถ”์ : ๊ฐ ๋…ธ๋“œ์˜ ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ .

๐Ÿ’ป ํŒŒ์ด์ฌ ์ •๋‹ต ์ฝ”๋“œ ๋ฐ ์ƒ์„ธ ํ•ด์„ค

import heapq

def dijkstra(graph, start, end):
    # ๋น„์šฉ ํ–‰๋ ฌ ์ดˆ๊ธฐํ™”
    distances = {node: float('inf') for node in graph}
    distances[start] = 0
    previous_nodes = {node: None for node in graph}
    priority_queue = [(0, start)]  # (๋น„์šฉ, ๋…ธ๋“œ)

    while priority_queue:
        current_distance, current_node = heapq.heappop(priority_queue)

        # ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ๋Š” ๊ฑด๋„ˆ๋›ฐ๊ธฐ
        if current_distance > distances[current_node]:
            continue

        for neighbor, weight in graph[current_node].items():
            distance = current_distance + weight

            # ๋” ์งง์€ ๊ฒฝ๋กœ ๋ฐœ๊ฒฌ ์‹œ ์—…๋ฐ์ดํŠธ
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                previous_nodes[neighbor] = current_node
                heapq.heappush(priority_queue, (distance, neighbor))

    # ๊ฒฝ๋กœ ์ถ”์ 
    path = []
    current = end
    while current is not None:
        path.append(current)
        current = previous_nodes[current]
    path.reverse()

    return distances[end], path

# ๊ทธ๋ž˜ํ”„ ์ •์˜ (๋น„์šฉ ํ–‰๋ ฌ์„ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ํ‘œํ˜„)
graph = {
    'A': {'B': 2, 'C': 5, 'D': 1},
    'B': {'A': 2, 'C': 3, 'D': 4},
    'C': {'A': 5, 'B': 3, 'D': 2},
    'D': {'A': 1, 'B': 4, 'C': 2, 'E': 3},
    'E': {'D': 3}
}

# ์‹คํ–‰
start_node = 'A'
end_node = 'E'
total_cost, shortest_path = dijkstra(graph, start_node, end_node)

print(f"์ตœ๋‹จ ๊ฒฝ๋กœ: {' -> '.join(shortest_path)}")
print(f"์ด ๋น„์šฉ: {total_cost}")

๐Ÿš€ ํ•œ๊ณ„์  ๋ฐ ์‹ค๋ฌด ๊ฐœ์„ ์ 

  • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ: ๋งค์šฐ ํฐ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ตœ์ ํ™” ๋ฐฉ์•ˆ: A* ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๊ฐ™์€ ํœด๋ฆฌ์Šคํ‹ฑ์„ ๋„์ž…ํ•˜์—ฌ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋™์  ๋ณ€ํ™”: ์‹ค์‹œ๊ฐ„ ๊ตํ†ต ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋น„์šฉ์ด ๋ณ€๋™๋  ๊ฒฝ์šฐ, ๋™์  ์—…๋ฐ์ดํŠธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ์ฃผ๊ธฐ์ ์ธ ์žฌ๊ณ„์‚ฐ ๋˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์—…๋ฐ์ดํŠธ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™”์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„๋„ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด ์Œ์‹ ๋ฐฐ๋‹ฌ ์•ฑ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜์…จ์Šต๋‹ˆ๋‹ค! ๋” ๋งŽ์€ ์งˆ๋ฌธ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ง์”€ํ•ด์ฃผ์„ธ์š”. ๋‹ค์Œ ๊ฐ•์˜์—์„œ ๋˜ ๋งŒ๋‚˜์š”!

<hr>

๐Ÿ’ฌ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์ž์œ ๋กญ๊ฒŒ ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”! (AI ๋น„์„œ๊ฐ€ ๋‹ต๋ณ€ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๐Ÿค–)

Categories:

Updated: