[백준]11657 타임머신 - Python 파이썬

2025. 4. 18. 09:27·코딩테스트/백준

문제

 

 

 

처음에 이 문제를 보고 떠오른 알고리즘은 union-find 그리고 다익스트라였다.

 

하지만 문제가 잘 풀리지 않아 구글링을 해본 후 벨만포드 알고리즘이라는 것을 알게되었다.

 

 

참고 자료: https://velog.io/@mjieun/Algorithm-%EB%B2%A8%EB%A7%8C-%ED%8F%AC%EB%93%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Bellman-Ford-algorithm-Python

 

[Algorithm] 벨만-포드 알고리즘(Bellman-Ford algorithm) - Python

벨만-포드 알고리즘을 통해 그래프에서 최단 거리를 구하고, 음수 사이클 존재 여부를 판단하는 방법을 알아보자.

velog.io

 

 

 

 

 

벨만 포드 알고리즘이란

 

  • 특정 출발 노드에서 다른 모든 노드까지의 최단 경로 탐색
  • 음수 가중치 에지가 있어도 수행할 수 있음
  • 전체 그래프에서 음수 사이클의 존재 여부를 판단할 수 있음
  • 시간 복잡도 O(VE) (V: 노드 수, E: 에지 수)

 

 

다익스트라와 차이점은 v-1번 반복 하는 것이 아닌 v번 반복을 통해 마지막 v번째에서 값이 갱신되는 경우 음수 사이클이 존재해서 값이 무한히 줄어드는 경우이기때문에 이 부분에 대한 처리를 따로 해주어야 된다는 점이다.

 

 

 

n,m = map(int,input().split())
INF = int(1e9)
dist = [INF] * (n+1)

edges = []

for i in range(m):
    a,b,c = map(int,input().split())
    edges.append([a,b,c])

def bf(start):
    dist[start] = 0
    for i in range(n):
        for j in range(m):
            now = edges[j][0]
            nxt = edges[j][1]
            time = edges[j][2]
            if dist[now] != INF and dist[nxt] > dist[now] + time:
                dist[nxt] = dist[now] + time
                #음수사이클 존재여부 확인
                if i == n-1:
                    return True
    return False

minus_cycle = bf(1)

if minus_cycle:
    print("-1")
else:
    for i in range(2,n+1):
        if dist[i] == INF:
            print("-1")
        else:
            print(dist[i])

 

 

 

벨만 포드 라는 알고리즘을 알고 있지 않으면 해결하기 어려웠던 문제였다. 다익스트라 문제는 기존에 많이 풀었지만 벨만 포드 알고리즘은 처음 접해서 구글링의 도움을 받았다..

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 1238 파티 -python 파이썬  (0) 2025.05.21
[백준]2252번 줄세우기 - python (위상정렬)  (0) 2025.05.19
[백준] 1253번 좋다 - python 파이썬  (0) 2025.04.17
[백준] 1744번 수 묶기 - python 파이썬  (0) 2025.03.20
[백준] 7663번 이중 우선순위 큐 - python 파이썬  (0) 2025.03.18
'코딩테스트/백준' 카테고리의 다른 글
  • [백준] 1238 파티 -python 파이썬
  • [백준]2252번 줄세우기 - python (위상정렬)
  • [백준] 1253번 좋다 - python 파이썬
  • [백준] 1744번 수 묶기 - python 파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    UnionFind
    python
    bastion host
    백엔드
    github
    MSA
    IT기획
    백준
    깃허브
    파이썬
    신한투자증권
    AWS
    그리디
    kdt교육
    프로그래머스
    알고리즘
    프로디지털아카데미
    다익스트라
    투포인터
    Java
    코테
    K디지털트레이닝
    알파코
    알파코캠퍼스
    EC2
    프디아
    코딩테스트
    spring
    백트래킹
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준]11657 타임머신 - Python 파이썬
상단으로

티스토리툴바