728x90
반응형
링크: https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
아이디어
- case가 빨 초 파 3개뿐이니 3가지 경우의 처리만 해주면 될 듯
- dp테이블을 만들고 첫 시작은 li와 같게 설정하고
- dp[i][j] = min(dp[i-1][중복되지 않는 경우], dp[i-1][중복되지 않는 경우])+li[i][j] 이런 식의 점화식을 사용
- 2중 for문을 돌며 dp 테이블을 다 채우고 dp배열의 마지막 요소의 min() 값을 출력하면 될 듯
구현
import sys
input = sys.stdin.readline
n = int(input())
li = [list(map(int,input().split())) for _ in range(n)]
dp = [[0]*3 for _ in range(n)]
dp[0] = li[0]
for i in range(1, n):
for j in range(3):
if j == 0:
dp[i][j] = min(dp[i-1][1], dp[i-1][2])+li[i][j]
elif j == 1:
dp[i][j] = min(dp[i-1][0], dp[i-1][2])+li[i][j]
else:
dp[i][j] = min(dp[i-1][0], dp[i-1][1])+li[i][j]
print(min(dp[n-1]))
마무리
- 오랜만에 풀어본 dp 아직 녹슬지 않은 듯?
- 그래프 탐색 백트래킹은 좀 감이 잡히니까 dp도 다시 풀어서 감을 찾아야겠다.
- 굿
728x90
반응형
'코테준비 > 백준' 카테고리의 다른 글
[백준] 숨바꼭질 3 - Python (0) | 2023.09.16 |
---|---|
[백준] 15654번: N과 M(5) - Python (0) | 2023.09.15 |
[백준] 5014번: 스타트링크 - Python (0) | 2023.09.13 |
[백준] 14889번: 스타트와 링크 - Python (1) | 2023.09.11 |