본문 바로가기
코딩테스트 파이썬/파이썬 프로그래머스 2단계

배달

by 세용용용용 2023. 11. 17.

 

나의 코드

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

감사합니당!!

'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글

미로 탈출  (2) 2023.11.22
거리두기 확인하기  (1) 2023.11.21
가장 큰 정사각형 찾기  (0) 2023.10.05
시소 짝꿍  (0) 2023.10.04
마법의 엘리베이터  (0) 2023.10.03