알고리즘 PS/Graph
그래프 - 가장 먼 노드, 1791. Find Center of Star Graph
explorer999
2024. 6. 12. 17:40
코딩테스트 연습 - 가장 먼 노드 | Programmers School
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
# 풀이 1
def solution(n, edge):
graph = [[]for _ in range(n+1)]
not_visited = [i for i in range(2, n+1)]
for a, b in edge:
graph[a].append(b)
graph[b].append(a)
far = {1}
while not_visited:
farther = set()
for node in far:
for j in graph[node]:
if j in not_visited:
not_visited.remove(j)
farther.add(j)
if not farther:
return 1
far = farther
return len(far)
테스트 케이스 10개 중 1 개에서만 시간초과가 나옴.
# 바로 deque 도입한 풀이 2
from collections import deque
def solution(n, edge):
graph = [[] for _ in range(n+1)]
dist = [0]*(n+1)
for i, j in edge:
graph[i].append(j)
graph[j].append(i)
queue = deque([1])
while queue:
x = queue.popleft()
if graph[x]:
for k in graph[x]:
if k == 1:
continue
if dist[k] == 0:
dist[k] = dist[x]+1
queue.append(k)
a = max(dist)
answer = dist.count(a)
return answer
시간 초과 없이 모든 테스트케이스를 통과했다.
Find Center of Star Graph - LeetCode
풀이 1
class Solution:
def findCenter(self, edges: List[List[int]]) -> int:
a, b = edges[0][0], edges[0][1]
if a in edges[1]:
return a
else:
return b
풀이 2
class Solution:
def findCenter(self, edges: List[List[int]]) -> int:
if edges[0][0]== edges[1][0]:
return edges[0][0]
elif edges[0][0]== edges[1][1]:
return edges[0][0]
else:
return edges[0][1]
두 번째가 조금 더 빨랐다..!