๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ (level3, python)

๊ฐœ๋ฐœ์ž HOON 2022. 10. 13. 11:17

๐Ÿ ๋ฌธ์ œ ์„ค๋ช…

 

n๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ๋Š” 1๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€์žˆ์Šต๋‹ˆ๋‹ค. 1๋ฒˆ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๋ž€ ์ตœ๋‹จ๊ฒฝ๋กœ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n, ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด vertex๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, 1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n์€ 2 ์ด์ƒ 20,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋ฉฐ ์ด 1๊ฐœ ์ด์ƒ 50,000๊ฐœ ์ดํ•˜์˜ ๊ฐ„์„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • vertex ๋ฐฐ์—ด ๊ฐ ํ–‰ [a, b]๋Š” a๋ฒˆ ๋…ธ๋“œ์™€ b๋ฒˆ ๋…ธ๋“œ ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ
6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์˜ˆ์ œ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๊ณ , 1๋ฒˆ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ๋Š” 4,5,6๋ฒˆ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.


๐Ÿ ํ’€์ด ์ฝ”๋“œ

import heapq

def dijkstra(start, distance, graph):
    q = []
    heapq.heappush(q, (0, start))
    distance[start] = 0

    while q:
        dist, now = heapq.heappop(q)
        if distance[now] < dist:
            continue
        for i in graph[now]:
            cost = dist + 1
            if cost < distance[i]:
                distance[i] = cost
                heapq.heappush(q, (cost, i))
    
def solution(n, edge):
    answer = 0
    
    INF = int(1e9)
    graph = [[] * (n+1) for _ in range(n+1)]
    distance = [INF] * (n+1)
    
    for e in edge:
        a, b = e
        graph[a].append(b)
        graph[b].append(a)
    
    dijkstra(1, distance, graph)
    return distance.count(max(distance[1:]))

 

๊ฐ„์„ ์˜ ๋น„์šฉ์ด ๋ชจ๋‘ 1์ธ ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌํ˜„์ด ํ•„์š”ํ•˜๋‹ค.

1) ์ธ์ ‘๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ 2์ฐจ์› ๋ฐฐ์—ด (graph)

2) ์ตœ๋Œ€ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ๋œ distance ๋ฐฐ์—ด (๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  ์˜ˆ์ •)

3) ๋‹ค์ต์ŠคํŠธ๋ผ ๊ตฌํ˜„์„ ์œ„ํ•œ ํž™์— (cost์™€ ํ˜„์žฌ ์œ„์น˜) ํŠœํ”Œ์„ ๋„ฃ๊ณ  ํž™์— ๋Œ€ํ•œ while๋ฌธ ๋ฐ˜๋ณต

4) ์ตœ์†Œํž™์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ๋‚ฎ์€ ์›์†Œ๋ฅผ ๋ฝ‘๊ณ , ๋ฝ‘์€ ์›์†Œ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ €์žฅ๋œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ณด๋‹ค ๊ธธ๋ฉด ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ (continue)

5) ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด, ํ˜„์žฌ ์œ„์น˜์—์„œ ์ธ์ ‘ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด cost ๊ณ„์‚ฐ. ์ด ๋ฌธ์ œ์—์„œ๋Š” ๊ฐ„์„  ๋น„์šฉ์ด ๋ชจ๋‘ 1์ด๋ฏ€๋กœ cost = dist + 1.

6) ์ธ์ ‘๋…ธ๋“œ์˜ ๋น„์šฉ์ด ์ €์žฅ๋œ ๊ฒƒ๋ณด๋‹ค ์ƒˆ๋กœ ๊ณ„์‚ฐ๋œ ๊ฒƒ์ด ๋” ์ž‘์œผ๋ฉด (๋” ์งง์€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด) distance ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ์œ„์น˜์™€ ๋น„์šฉ์„ ํž™์— ๋„ฃ๋Š”๋‹ค. (์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐฑ์‹ ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์ธ์ ‘๋…ธ๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—)

7) ํž™์ด ๋‹ค ๋น„์›Œ์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต.

 

๊ฐ„์„  ๋น„์šฉ์ด ์žˆ๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ์˜ ๊ฒฝ์šฐ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์— ์ธ์ ‘ ๋…ธ๋“œ๋งŒ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , (์ธ์ ‘๋…ธ๋“œ, ๋น„์šฉ) ํ˜•์‹์œผ๋กœ ์ €์žฅํ•ด์„œ ๋‹ค์ต์ŠคํŠธ๋ผ ๋กœ์ง์—์„œ 1์„ i[1], i๋ฅผ i[0]๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ”์„œ ๋„ฃ์œผ๋ฉด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

๋ฐฑ์ค€์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๋กœ ๋„˜์–ด์˜จ ์ง€ ์–ผ๋งˆ ์•ˆ ๋๋Š”๋ฐ ๋ฒŒ์จ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ๋งŒ๋‚˜๋‹ค๋‹ˆ ๋ฟŒ๋“ฏ-