waveofmymind
기록하는 습관
waveofmymind
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • 📝 정리 (5)
    • 🌊TIL (9)
    • 💻CS (1)
      • 자료구조 (1)
    • 📙Language (9)
      • ☕Java (6)
      • 🤖Kotlin (3)
    • 🍃Spring (28)
    • 👨🏻‍💻알고리즘 (67)
      • 프로그래머스 (59)
      • 백준 (3)
    • 👷DevOps (4)
      • 🐳Docker (2)
      • 🤵Jenkins (1)

블로그 메뉴

  • 홈
  • Spring
  • Java
  • 알고리즘

공지사항

인기 글

태그

  • 스택
  • SpringAOP
  • 스프링 시큐리티
  • spring
  • AOP
  • 챗GPT
  • BFS
  • 힙
  • spring boot
  • Spring Security
  • 트랜잭션
  • 트랜잭션 전파
  • kotlin
  • mybatis
  • kotest
  • 통합테스트
  • 다이나믹 프로그래밍
  • 스프링 부트
  • CORS
  • sql
  • LeetCode
  • resultset
  • 코틀린
  • til
  • 완전탐색
  • Connection
  • Open AI
  • 스프링
  • JDBC
  • chat GPT

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
waveofmymind

기록하는 습관

[백준] 1162. 도로포장
👨🏻‍💻알고리즘/백준

[백준] 1162. 도로포장

2023. 1. 22. 18:06

✍🏻코드

import heapq
INF = 98765432109876543210

n,m,k = map(int,input().split())
graph = [[] for _ in range(n+1)]
for i in range(m):
    a,b,c = map(int,input().split())
    graph[a].append((b,c))
    graph[b].append((a,c))
q = []
distance = [[INF]*(k+1) for _ in range(n+1)]

for i in range(k+1):
    distance[1][i] = 0
heapq.heappush(q,(0,1,0))

while q:
    dist,now,p = heapq.heappop(q)
    if dist > distance[now][p]:
        continue
    if p+1 <= k:
        for idx,x in graph[now]:
            if distance[idx][p+1] > dist:
                distance[idx][p+1] = dist
                heapq.heappush(q,(dist,idx,p+1))
    for idx,x in graph[now]:
        cost = x + dist
        if distance[idx][p] > cost:
            distance[idx][p] = cost
            heapq.heappush(q,(cost,idx,p))
answer = INF
for i in range(k+1):
    answer = min(distance[n][i],answer)
print(answer)

💡풀이

  • 노드(도시)에서 노드 끝까지 최단 경로를 구하는 다익스트라 알고리즘으로 풀 수 있다.
  • 대신, 각 경로간 k번만큼 도로 포장을 해서 거리를 0으로 만들수 있다.
  • 기존 다익스트라 알고리즘으로 푸는 문제에서 해당 노드까지의 최단거리를 저장해두는 배열을 k+1개만큼 생성해서, 각 인덱스에 도로 포장을 한 횟수당 최단 경로를 저장한다.
  • 그리고 현재 포장한 횟수의 인덱스까지 힙큐에 넣고, 포장을 더 할 수 있으면 idx번 도시까지의 거리 x를 0으로 만들 수 있다.

'👨🏻‍💻알고리즘 > 백준' 카테고리의 다른 글

[백준] 11053. 가장 긴 증가하는 부분 수열  (0) 2023.01.24
[백준] 2096. 내려가기  (0) 2023.01.21
    '👨🏻‍💻알고리즘/백준' 카테고리의 다른 글
    • [백준] 11053. 가장 긴 증가하는 부분 수열
    • [백준] 2096. 내려가기
    waveofmymind
    waveofmymind

    티스토리툴바