cs [파이썬] 백준 17404 : RGB거리 2
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/PYTHON 알고리즘 연습

[파이썬] 백준 17404 : RGB거리 2

by 시몬쯔 2020. 2. 12.
728x90
반응형

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))

728x90
반응형

댓글