Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Python] ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ

meeeeejin 2021. 4. 5. 16:20

๋ฌธ์ œ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/49189

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ

6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

programmers.co.kr

 

 

๋ฌธ์ œ ์„ค๋ช…

1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 

1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ BFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ 1๋ฒˆ ๋…ธ๋“œ์™€์˜ distance๋ฅผ ์ €์žฅํ•œ ๋’ค, distance๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ–๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

  1. ์ธ์ ‘ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ €์žฅํ•  graph์™€ 1๋ฒˆ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  distance ์ดˆ๊ธฐํ™”
  2. ์ฃผ์–ด์ง„ edge ์ •๋ณด๋ฅผ graph์— ์ €์žฅ
  3. 1๋ฒˆ ๋…ธ๋“œ์˜ distance๋ฅผ 0์œผ๋กœ ํ•˜๊ณ , 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž… (BFS ์‹œ์ž‘)
  4. ํ์—์„œ ์›์†Œ๋ฅผ ํ•˜๋‚˜ ๊บผ๋‚ด๊ณ (v) ํ•ด๋‹น ์›์†Œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ(x)๊ฐ€ ์žˆ๋‹ค๋ฉด
    1) ํ•ด๋‹น ์ธ์ ‘ ๋…ธ๋“œ(x)์˜ distance๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ(v)์˜ (distance + 1)๋กœ ๊ฐฑ์‹    // ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จ
    2) ํ์— x ๋…ธ๋“œ ์‚ฝ์ž…
  5. 4๋ฒˆ๊ณผ์ •์„ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต (BFS ์ˆ˜ํ–‰)
  6. BFS ์ˆ˜ํ–‰์ด ๋๋‚˜๋ฉด distance์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ฐ–๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

 

 

 

์†Œ์Šค์ฝ”๋“œ

from collections import deque

def bfs(start, graph, distance):
    distance[start] = 0
    queue = deque([start])
    
    while queue:
        v = queue.popleft()
        for x in graph[v]: # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ ๋ฐฉ๋ฌธ
            if distance[x] == -1:
                # ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ = ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ + 1
                distance[x] = distance[v] + 1
                queue.append(x)

def solution(n, edge):
    answer = 0
    graph = [[] for _ in range(n + 1)]
    distance = [-1] * (n + 1)
    # ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ •๋ณด๋ฅผ graph์— ์ €์žฅ
    for (v1, v2) in edge:
        graph[v1].append(v2)
        graph[v2].append(v1)

    bfs(1, graph, distance)
    answer = distance.count(max(distance))
    return answer

 

728x90