세용용용용 2023. 11. 17. 17:31

 

나의 코드

from collections import deque
def solution(n, road, k):
    answer = 0
    
    # 이어지는 경로들과 거리의 리스트로 담아 딕셔너리 생성
    graph = {}
    for i in road:
        if i[0] not in graph:
            graph[i[0]] = [(i[1],i[2])]
        else:
            graph[i[0]].append((i[1],i[2]))
            
        if i[1] not in graph:
            graph[i[1]] = [(i[0],i[2])]
        else:
            graph[i[1]].append((i[0],i[2]))
    
    # 방문 경로
    visit = [0]*n
    visit[0] = 1
    
    # queue생성해주고 첫번쨰 경우를 넣어준다
    queue = deque()
    queue.append((1,0))
    #print(queue)
    #print(graph)
    
    # 반복문 동작
    while queue:
    	# 노드와 거리를 변수에 저장해주고
        node, dt = queue.popleft()
        
        # graph를 돌며 k보다 거리가 작은 조건에서
        # 방문 안했거나 기존 거리보다 짧을 경우 queue에 넣어주고 visit치환
        for nd_x,dt_y in graph[node]:
            if dt+dt_y<=k and (visit[nd_x-1]==0 or dt+dt_y<visit[nd_x-1]):
                queue.append((nd_x, dt+dt_y))
                visit[nd_x-1] = dt+dt_y
    #print(visit)   
    # 최종적으로 방문 가능한 경우의수 리턴
    answer = n-visit.count(0)
    return answer

감사합니당!!