99클럽 코테 스터디 27일차 TIL - 지름길(백준 #1446)

2024. 11. 23. 21:56·99클럽 코테 스터디

❇️오늘의 학습 키워드 : 지름길(백준 #1446)

문제

매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커브가 많아서 정말 운전하기도 힘들다. 어느 날, 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행할 수는 없다.

세준이가 운전해야 하는 거리의 최솟값을 출력하시오.

입력

첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주어진다. 모든 위치와 길이는 10,000보다 작거나 같은 음이 아닌 정수이다. 지름길의 시작 위치는 도착 위치보다 작다.

출력

세준이가 운전해야하는 거리의 최솟값을 출력하시오.

예제 입력 1 

5 150
0 50 10
0 50 20
50 100 10
100 151 10
110 140 90

예제 출력 1 

70

예제 입력 2 

2 100
10 60 40
50 90 20

예제 출력 2 

80

예제 입력 3 

8 900
0 10 9
20 60 45
80 190 100
50 70 15
160 180 14
140 160 14
420 901 5
450 900 0

예제 출력 3 

432

정답 코드

import sys, heapq

n, d = map(int, sys.stdin.readline().split())  # n: 지름길 개수, d: 고속도로 길이

# 그래프 초기화: d+1 길이의 빈 리스트 생성
graph = [[] for _ in range(d+1)]
dist = [float("inf")] * (d+1)  # 0부터 d까지 모든 지점의 최단 거리

# 기본적으로 1칸씩 이동하는 경우 추가
for i in range(d):
    graph[i].append((i+1, 1))  # i에서 i+1로 가는 거리는 항상 1

for _ in range(n):
    start, end, length = map(int, sys.stdin.readline().split())  # 시작점, 끝점, 지름길 길이
    if end <= d:  # 지름길의 끝점이 고속도로 길이를 넘어가지 않을 경우만 추가
        graph[start].append((end, length))

q = []
heapq.heappush(q, (0, 0))  # 시작점 (거리 0, 위치 0) 추가
dist[0] = 0  # 시작점의 최단 거리 초기화

while q:
    w1, now = heapq.heappop(q)  # 현재 노드와 그 거리(w1)를 꺼냄

    for nxt, w2 in graph[now]:  # 현재 노드 now와 연결된 노드 nxt와 그 거리 w2를 확인
        cost = dist[now] + w2  # 현재 노드를 거쳐 nxt로 가는 거리 계산
        if dist[nxt] > cost:  # 더 짧은 경로가 발견되면 업데이트
            dist[nxt] = cost
            heapq.heappush(q, (cost, nxt))  # 갱신된 거리와 노드를 큐에 추가

print(dist[d])

❇️오늘의 회고

  - 지름길을 이용한 경우와 이용하지 않은 경우를 비교해서 더 짧은 경로를 찾는 것이 중요하다. 

  - 항해99 코테스터디 덕분에 쉬는 날 없이 매일 알고리즘 공부를 할 수 있어서 좋은 것 같다. 벌써 약 일주일정도밖에 안남았는데 이 습관을 오래 유지할 수 있었으면 좋겠다...

  - 내일 11시, 문제를 풀기 전에 위 문제를 한번 더 복습하고 내일 문제에 사용된 알고리즘에 대해서 공부할 것이다!🙂

저작자표시 (새창열림)

'99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 29일차 TIL - 타임머신(백준 #11657)  (0) 2024.11.25
99클럽 코테 스터디 28일차 TIL - 이모티콘 할인행사(프로그래머스 #150368)  (1) 2024.11.24
99클럽 코테 스터디 26일차 TIL - 돌 게임(백준 #9655)  (0) 2024.11.22
99클럽 코테 스터디 25일차 TIL - 로봇 조종하기(백준 #2169)  (0) 2024.11.21
99클럽 코테 스터디 24일차 TIL - 저울(백준 #2437)  (2) 2024.11.20
'99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 29일차 TIL - 타임머신(백준 #11657)
  • 99클럽 코테 스터디 28일차 TIL - 이모티콘 할인행사(프로그래머스 #150368)
  • 99클럽 코테 스터디 26일차 TIL - 돌 게임(백준 #9655)
  • 99클럽 코테 스터디 25일차 TIL - 로봇 조종하기(백준 #2169)
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    99클럽
    Til
    개발자취업
    항해99
    코딩테스트준비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
99클럽 코테 스터디 27일차 TIL - 지름길(백준 #1446)
상단으로

티스토리툴바