프로그래머스 레벨 3 가장 먼 노드

yjkim·2023년 6월 11일
0

알고리즘

목록 보기
15/60

원래코드

from collections import deque
def solution(n, vertex):
    visited=[0]*(n+1)
    queue=deque()
    queue.append([1,0])
    visited[1]=1
    vertexdict={}
    anslist=[[1,0]]
    maxdist=0
    answer=0
    
    for v in vertex:
        try:
            vertexdict[v[0]].append(v[1])
        except:
            vertexdict[v[0]]=[v[1]]
        try:
            vertexdict[v[1]].append(v[0])
        except:
            vertexdict[v[1]]=[v[0]]
    
    while queue:
        cur=queue.popleft()
        curvert=cur[0]
        curdist=cur[1]
        if maxdist==curdist:
            answer+=1
        else:
            maxdist=curdist
            answer=1
        for ne in vertexdict[curvert]:
            if visited[ne]==0:
                queue.append([ne,curdist+1])
                anslist.append([ne,curdist+1])
                visited[ne]=1
            
    return answer

통과하긴 했는데 예외처리도 되어있고, 코드가 뭔가 지저분함. 간결화 ㄱㄱ

수정된 코드

from collections import deque

def solution(n, vertex):
    visited = [0] * (n+1)
    queue = deque()
    queue.append((1, 0))
    visited[1] = 1
    vertexdict = {}
    anslist = [(1, 0)]
    maxdist = 0
    answer = 0
    
    for v in vertex:
        vertexdict.setdefault(v[0], []).append(v[1])
        vertexdict.setdefault(v[1], []).append(v[0])
    
    while queue:
        cur, curdist = queue.popleft()
        
        if maxdist == curdist:
            answer += 1
        else:
            maxdist = curdist
            answer = 1
        
        for ne in vertexdict[cur]:
            if visited[ne] == 0:
                queue.append((ne, curdist+1))
                anslist.append((ne, curdist+1))
                visited[ne] = 1
    
    return answer

setdefault함수를 사용해서 초기 value값이 있다면 append 아니면 []로 해줌. -> try except 제거

새롭게 알게된 사실인데 파이썬 이중 리스트는 각 행의 원소 갯수가 달라도 되는듯?
[[1,2],[1,2,3]] 이렇게 선언 가능
다음번에 이런 문제 풀때 한번 활용해 보도록 하자

profile
We may throw the dice, but the Lord determines how they fall

0개의 댓글