[Python] [Programmers] 가장 먼 노드(49189)

긍정왕·2021년 5월 23일
2

Algorithm

목록 보기
4/69

💡 문제 해결

  1. setdefault메소드를 활용해 노드간의 연결 설정
  2. 방문 여부와 depth를 확인하기 위한 visited 리스트 생성
  3. 1번노드를 시작으로 가까운 거리의 노드들부터 탐색
  4. 연결된 노드들의 depth를 visited에 저장
  5. visited 리스트 중 최대값을 가지는 수의 count가 가장 멀리 떨어진 노드의 개수

📌 graph의 데이터를 어떻게 저장할까 하다가 setdefault를 찾게되어 깔끔하게 구현
👁‍🗨 setdefault란?

  • 키 값과 값 하나를 인자로 받아 키 값이 존재한다면 키 값을 반환하고, 없다면 두 번째 설정해준 인자를 반환


🧾 문제 설명

n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 
1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 
가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다.

노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 
1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성해주세요.

제한사항
노드의 개수 n은 2 이상 20,000 이하입니다.
간선은 양방향이며 총 1개 이상 50,000개 이하의 간선이 있습니다.
vertex 배열 각 행 [a, b]는 a번 노드와 b번 노드 사이에 간선이 있다는 의미입니다.

문제보기



🖨 입출력



📝 풀이

from collections import deque

def solution(n, vertex):
    answer = 0

    graph = dict()
    for node1, node2 in vertex:
        graph.setdefault(node1, []).append(node2)
        graph.setdefault(node2, []).append(node1)
    
    # node number, depth
    deq = deque([[1, 0]])
    # 거리 및 방문 여부
    visited = [-1] * (n + 1)
    while deq:
        n, depth = deq.popleft()
        visited[n] = depth
        for i in graph[n]:
            if visited[i] == -1:
                visited[i] = 0
                deq.append([i, depth + 1])
        depth += 1
    
    answer = visited.count(max(visited))

    return answer

profile
Impossible + 땀 한방울 == I'm possible

0개의 댓글