https://www.acmicpc.net/problem/17404
17404번: RGB거리 2
RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이고, 첫 집과 마지막 집도 이웃이다. 각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠하는 비용의 최솟값을 구하는 프로그램을 작성하시오.
www.acmicpc.net
오늘 풀어볼 문제는 저번 동적계획법에 있던 RGB거리문제에 이어 RGB거리2이다.
저번과 차이가 있다면 첫번째 집과 마지막 집이 이웃이라는점.
코드를 돌려 정확하게 푼 것 같은데 백준에서는 계속 틀렸다고 한다.
이유 아시는 분 댓글 부탁드립니다.
(마지막 집이 R,G,B냐에 따라 dp[0][j] = INF로 각각 놓고 첫번째 집이 마지막 집과 색상이 다르게 만들었다.)
import sys
N = int(sys.stdin.readline())
prices = [[0 for col in range(3)] for row in range(N)]
dp = [[0 for col in range(3)] for row in range(N)]
for i in range(N):
rgblist = list(map(int,sys.stdin.readline().split()))
prices[i] = rgblist
# prices[-1] = prices[0] #첫번째 집을 붙여둠
# print(prices)
dp[0] = prices[0] #0번째 집은 그냥 가격 그대로
# print(dp)
j = 1
result = []
for iter in range(3):
dp[0][iter] = 100001 #마지막집에 따라 바뀌게
while j < N:
# print(dp[j-1][0])
dp[j][0] = min(dp[j - 1][1] + prices[j][0], dp[j - 1][2] + prices[j][0])
dp[j][1] = min(dp[j - 1][0] + prices[j][1], dp[j - 1][2] + prices[j][1])
dp[j][2] = min(dp[j - 1][0] + prices[j][2], dp[j - 1][1] + prices[j][2])
j += 1
result.append(dp[N-1][iter])
print(min(result))
'개발 > PYTHON 알고리즘 연습' 카테고리의 다른 글
[파이썬] 백준 9019번 : DSLR (0) | 2020.02.15 |
---|---|
[파이썬] 백준 13913 : 숨바꼭질 4 (0) | 2020.02.13 |
[파이썬] 백준 9252 : LCS 2 (0) | 2020.02.13 |
[파이썬] 백준 14002 : 가장 긴 증가하는 부분 수열 4 (0) | 2020.02.13 |
[파이썬] 백준 12852 : 1로 만들기 2 (0) | 2020.02.12 |
댓글