Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- API 활용 신청
- 드림핵
- expo
- redux state값 유지
- level3
- Redux
- python
- React
- 티스토리챌린지
- 개발
- 프로그래머스
- web-view
- 새로고침
- php-1
- 꿀팁 환영
- 부산 맛집 OPEN API
- 보안
- 고고학 최고의 발견
- react-router-dom
- url 랜더링
- 오블완
- 훈수 가능
- 창업 300
- Dreamhack
- 공공데이터 포털
- 블로그 뉴비
- apk 빌드
- 코딩테스트
- 사업계획서
Archives
- Today
- Total
1223v
[Programmers] Python 프로그래머스 스타 수열(70130) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/70130
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
음수간선이 존재하는 벨만포드 문제이다.
하지만, 음수 간선을 판별 혹은 음수 간선인 부분을 찾는 것이 아닌 음수 간선을 피해 값이 증가하는 방향으로 나아가 최대한 높은 값으로 도착지에 도착해야하는 문제이다.
하지만, 만약 사이클이 존재하고, 마지막 도착 지점이 음수 간선 사이클이라면, -1을 출력하는 문제이다.
import sys
input = sys.stdin.readline
N,M = map(int,input().split())
graph = []
distance = [-float('inf')] * (N+1)
put = [0] * (N+1)
for _ in range(M):
s,e,cost = map(int,input().split())
graph.append((s,e,cost))
def bf(start):
distance[start] = 0
for i in range(N):
for s,e,cost in graph:
if distance[e] < distance[s] + cost and distance[s] != -float('inf'):
distance[e] = distance[s] + cost
put[e] = s
if i == N-1:
distance[e] = float('inf')
if distance[N] == float('inf'):
return -1
k = N
res = []
while k != 1:
res.append(k)
k = put[k]
res.append(k)
res = res[::-1]
return res
result = bf(1)
if result == -1:
print(-1)
else:
print(*result)
회고,
벨만 포드는 음수간선으로만 활용하는 방식만 알고 있었는데 새롭게 음수간선을 피하는 방법도 알게 되었다.
728x90
'PS' 카테고리의 다른 글
[Programmers] Python, Ruby 프로그래머스 불량 사용자(64064) (0) | 2025.02.15 |
---|---|
[BOJ] Python, Ruby 백준 고양이는 많을수록 좋다 (27961) (0) | 2025.02.11 |
[BOJ] Python 백준 소용돌이 예쁘게 출력하기(1022) (0) | 2025.02.05 |
[BOJ] Python, Ruby 백준 N-Queen(9663) (0) | 2025.02.04 |
[BOJ] Ruby 백준 게똥벌레(3020) (0) | 2025.02.02 |