ProblemSolving/Graph

프로그래머스 가장 먼 노드 (파이썬)

OSNIM 2022. 5. 15. 00:50
반응형

Level 3, Graph

문제 : https://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

 

문제 설명

n개의 노드를 가진 그래프
각 노드는 1부터 n까지 번호가 매겨짐
1번 노드에서 가장 멀리 떨어진 노드의 개수
가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미
간선에 대한 정보가 담긴 2차원 배열 vertex 
1번 노드로부터 가장 멀리 떨어진 노드 개수 반환

제한사항

  • 2 <= n <= 20,000 
  • 간선은 양방향이며,  1 <= 간선의 수 <= 50,000
  • vertex의 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 것을 의미

입출력 예

n vertex return
6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3

입출력 예 설명

1번 노드에서 가장 멀리 떨어진 노드는 4,5,6번 노드

 

import heapq as hq

#다익스트라 사용
def solution(n, edge):
    answer = 0
    INF = int(10e9)
    costs = [INF] * (n + 1)
    arr = [[] for _ in range(n + 1)]
    for [i, j] in edge:
        #양 방향을 의미
        arr[i].append(j)
        arr[j].append(i)
    q = []
    hq.heappush(q, [0, 1])
    costs[1] = 0
    while q:
        cost, now = hq.heappop(q)
        if costs[now] < cost:
            continue
        for e in arr[now]:
            # 비용은 모두 1로 동일
            dist = cost + 1
            if dist < costs[e]:
                costs[e] = dist
                hq.heappush(q, [dist, e])
    
    # 2번 노드부터 최댓값 찾기
    MAX = max(costs[2:])
    for i in range(1, n + 1):
        if costs[i] == MAX:
            answer += 1

    return answer

BFS와 다익스트라를 고민하다가 다익스트라를 연습하기 위해 다익스트라로 풀어보았습니다.

비용이 없어서 +1씩 증가시켜 주며 최솟값을 비교했습니다.

반응형

'ProblemSolving > Graph' 카테고리의 다른 글

프로그래머스 순위 (파이썬)  (0) 2022.05.18