본문 바로가기

백준 풀이

백준 11657 - 합이 0인 네 정수 (Python)

깃허브:

https://github.com/MSIQOC/BOJ/blob/master/b11657_%ED%83%80%EC%9E%84%EB%A8%B8%EC%8B%A0.py

 

GitHub - MSIQOC/BOJ: 백준 문제들에 대한 저의 풀이가 포함돼있습니다.

백준 문제들에 대한 저의 풀이가 포함돼있습니다. Contribute to MSIQOC/BOJ development by creating an account on GitHub.

github.com

 

https://www.acmicpc.net/problem/11657

 

11657번: 타임머신

첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. 

www.acmicpc.net

https://msiqoc.tistory.com/34

 

벨만포드 알고리즘

https://yabmoons.tistory.com/365 [ 벨만포드 알고리즘 ] 개념과 구현방법 (C++) 이번 글에서는 벨만포드 알고리즘에 대해서 알아보자. 1. 벨만포드 알고리즘 ?? 그래프 알고리즘에서 '최소비용'을 구하는

msiqoc.tistory.com

벨만포드 알고리즘을 써서 풀면 되는 문제이다.

키워드: x도시에서 y도시로 가는 가장 빠른 시간, [음수]인 시간 존재.

 


Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#
# Created by MinSeo on 2022/02/09.
# Copyright ⓒ 2021 MinSeo Shin. All rights reserved.
#
 
inf = float('inf')
n, m = map(int, input().split())
 
edge = []
dist = [inf] * (n+1)
for i in range(m):
    a, b, c = map(int, input().split())
    edge.append((a, b, c))
 
 
def bellman(start):
    dist[start] = 0
    for v in range(n):
        for i in range(m):
            s = edge[i][0]
            c = edge[i][2]
            e = edge[i][1]
            if dist[s] != inf and dist[e] > c + dist[s]:
                dist[e] = c + dist[s]
                if v == n-1:
                    return True
    return False
 
 
if bellman(1):
    print(-1)
else:
    for i in range(2len(dist)):
        print(dist[i]) if dist[i] != inf else print(-1)
 
cs

'백준 풀이' 카테고리의 다른 글

백준 5052 - 전화번호 목록 (Python)  (0) 2022.02.18
백준 7453 - 합이 0인 네 정수 (Python)  (0) 2022.02.13
백준 17298 - 오큰수 (Python)  (0) 2022.02.07
백준 11047 - 동전0  (0) 2021.03.28
백준 1149 - RGB거리  (0) 2021.03.28