[2024] day 180. Leetcode 1791. Find Center of Star Graph

gunny·2024년 6월 27일
0

코딩테스트

목록 보기
492/530

2024년부터 새롭게 다시 시작하는 코딩테스트

2024년 6월 27일 (목)
Leetcode daily problem

1791. Find Center of Star Graph

https://leetcode.com/problems/find-center-of-star-graph/?envType=daily-question&envId=2024-06-27

Problem

1부터 n까지 레이블이 지정된 n개의 노드로 구성된 방향이 없는 별 그래프가 있습니다. 별형 그래프는 하나의 중심 노드가 있고 중심 노드를 다른 모든 노드와 연결하는 정확히 n - 1개의 간선이 있는 그래프이다.

각 edge[i] = [ui, vi]는 노드 ui와 vi 사이에 가장자리가 있음을 나타내는 2차원의 정수 배열 edges가 주어질 때 주어진 별 그래프의 중심을 반환한다.

Solution

graph degree, greedy

별 그래프의 중심 노드는 다른 모든 노드와 연결되어 있어 n-1의 연결을 가지고 있고, 다른 노드들은 각 하나의 연결만을 가지고 있다는 걸 알 수 있다.
즉, 노드가 가지는 연결 수인(차수)가 중심노듣 n-1, 다른노드는 1인 것이다.

중심 노드를 찾기 위해서 각 노드의 차수를 세고, 모든 edge를 반복하면서 각 edge가 연결하는 두 노드의 차수의 카운터를 업데이트하여 맵에 저장하고, 해당 차수가 n-1인 노드를 찾는 것이다.

class Solution:
    def findCenter(self, edges: List[List[int]]) -> int:
        
        degree_map = {}
        
        for edge in edges:
            degree_map[edge[0]] = degree_map.get(edge[0], 0) +1
            degree_map[edge[1]] = degree_map.get(edge[1], 0) +1
            
        
        for node, cnt in degree_map.items():
            if cnt == len(edges):
                return node
            
            
        return -1

해당 코드에서 edge를 순회하면서 degree의 맵을 채우고 있는데, edges 리스트의 모든 edge를 순회하므로 시간 복잡도는 O(n) 이다.
추후 저장한 degree_map을 순회하면서 중심 노드를 찾고 있기 때문에 최대 n개의 노드를 순회하여 시간 복잡도는 O(n)가 소요된다.
즉 전체 시간 복잡도는 O(n) 이다.

여기서 degree_map에서 n개의 노드를 저장할 수 있으므 공간복잡도는 O(n) 이고 나머지는 상수공간이므로 최종 공간복잡도는 O(n) 이다.

각 시간 복잡도와 공간복잡도가 O(n)이 소요될 때,
이를 최적화 하는 방법으로 greedy 방법을 사용해본다면 아래와 같다.

Code

class Solution:
    def findCenter(self, edges: List[List[int]]) -> int:
        
        edge1, edge2 = edges[0], edges[1]
        
        return edge1[0] if edge1[0] in edge2 else edge1[1]

별 그래프에서 중심 노드가 모든 edge에 나타나므로, 각 노드의 차수를 계산하지 않고 모든 edge에 나타나는 노드를 찾으면 해당 노드가 중심 노드이다.

주어진 배열의 임의의 두 edge만 확인해서 이 edge의 공통 노드는 중심노드가 될 것이므로 차수를 셀 때보다 더 적은 시간 및 공간이 필요된다.

Complexicity

시간 복잡도

기존 배열의 첫 번째, 두 번째 edge로 요소가 포함되어 있는지를 확인하는 조건으로 해당 비교는 시간복잡도 O(1) 이다.

공간 복잡도

각 기존 배열의 처음과 두번째 요소를 가리키는 변수들로, 추가적인 메모리 사용이 거의 없어 공간 복잡도에 영향을 미치지 않는다. 즉 공간 복잡도는 O(1)이다.

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글