반응형
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 | 31 |
Tags
- N과M
- BFS
- 수학
- 운영체제
- 딕셔너리
- 투포인터
- dfs
- DP
- 프로그래머스
- 백준
- 가상메모리
- 에라스토테네스의 체
- 스택
- level1
- 다이나믹 프로그래밍
- 코딩테스트
- 가상메모리 관리
- python
- 다익스트라
- level2
- 힙
- 파이썬
- programmers
- 재귀
- 그리디
- 브루트포스
- level3
- MYSQL
- 구현
- BOJ
Archives
- Today
- Total
동캄의 코딩도장
백준 4883 [삼각 그래프] 파이썬 본문
반응형
https://www.acmicpc.net/problem/4883
import sys
k = 0 # 테스트 케이스 번호를 저장하는 변수 초기화
while True:
N = int(sys.stdin.readline()) # 그래프의 행의 개수 N을 입력받음
if N == 0: # N이 0이면 입력 종료
break
nodes = [] # 각 노드의 비용을 저장할 리스트
for _ in range(N):
# 각 행의 노드 비용을 입력받아 리스트에 추가
nodes.append(list(map(int, sys.stdin.readline().split())))
# 최소 비용을 저장할 2차원 리스트. costs[i][j]는 (i, j)까지의 최소 비용을 의미
costs = [[0 for _ in range(3)] for _ in range(N)]
# 첫 번째 행 (i=0)의 초기 비용 설정
# costs[0][0]: 첫 번째 행의 0번째 열로 가는 경우는 존재하지 않으므로 매우 큰 값으로 초기화
costs[0][0] = 1000001
# costs[0][1]: 첫 번째 행의 1번째 열로 가는 비용은 해당 노드의 값과 동일
costs[0][1] = nodes[0][1]
# costs[0][2]: 첫 번째 행의 2번째 열로 가는 비용은 1번째 열을 거쳐야 하므로 nodes[0][1] + nodes[0][2]
costs[0][2] = nodes[0][1] + nodes[0][2]
# 두 번째 행부터 N-1번째 행까지 최소 비용 계산
for i in range(1, N):
# costs[i][0]: 현재 행의 0번째 열로 가는 최소 비용
# 이전 행의 0번째 열 또는 1번째 열에서 현재 노드(nodes[i][0])로 이동하는 경우 중 최소값
costs[i][0] = min(costs[i-1][0], costs[i-1][1]) + nodes[i][0]
# costs[i][1]: 현재 행의 1번째 열로 가는 최소 비용
# 이전 행의 0, 1, 2번째 열에서 이동하거나, 현재 행의 0번째 열에서 이동하는 경우 중 최소값
# (costs[i][0]을 고려하는 이유는 (i,0) -> (i,1) 로 이동하는 경우가 있기 때문)
costs[i][1] = min(costs[i-1][0], costs[i-1][1], costs[i-1][2], costs[i][0]) + nodes[i][1]
# costs[i][2]: 현재 행의 2번째 열로 가는 최소 비용
# 이전 행의 1, 2번째 열에서 이동하거나, 현재 행의 1번째 열에서 이동하는 경우 중 최소값
# (costs[i][1]을 고려하는 이유는 (i,1) -> (i,2) 로 이동하는 경우가 있기 때문)
costs[i][2] = min(costs[i-1][1], costs[i-1][2], costs[i][1]) + nodes[i][2]
k += 1 # 테스트 케이스 번호 증가
# 최종 목적지는 N-1번째 행의 1번째 열 (가운데 노드)이므로 costs[N-1][1] 출력
print("{}. {}".format(k, costs[N-1][1]))
간단한 DP 문제이다.
반응형
'코테 > BOJ' 카테고리의 다른 글
백준 1744 [수 묶기] 파이썬 (0) | 2025.06.14 |
---|---|
백준 2170 [선 긋기] 파이썬 (0) | 2025.06.14 |
백준 2240 [자두나무] 파이썬 (0) | 2025.06.14 |
백준 15486 [퇴사 2] 파이썬 (0) | 2025.05.27 |
백준 16920 [확장] 파이썬 (0) | 2025.05.26 |