Skip to content

Latest commit

 

History

History
26 lines (22 loc) · 1.5 KB

풀이_1149.md

File metadata and controls

26 lines (22 loc) · 1.5 KB

🦐 백준 1149 - RGB거리

  • Date : 2020.11.3(화)
  • Time : 30분

문제

  • RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
    • 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
    • N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
    • i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.

코드 풀이

for i in range(1, len(arr)):
    arr[i][0] = min(arr[i - 1][1], arr[i - 1][2]) + arr[i][0]
    # 빨간색으로 칠했을 때 최소값
    arr[i][1] = min(arr[i - 1][0], arr[i - 1][2]) + arr[i][1]
    # 초록색으로 칠했을 때 최소값
    arr[i][2] = min(arr[i - 1][0], arr[i - 1][1]) + arr[i][2]
    # 파랑색으로 칠했을 때 최소값
print(min(arr[N - 1][0], arr[N - 1][1], arr[N - 1][2]))

: 만약 i를 빨간색으로 칠했을 때를 본다면 (i를 빨간색으로 칠하는 비용) + (i-1를 초록색으로 칠하는 비용 or i-1를 파란색으로 칠하는 비용 중 최소값) 일 것이다. 이런 빨강,초록,파랑 경우의 수를 3개지를 구해주면서 맨 뒤에 쌓이게한다. 그리고 마지막 열에서 가장 작은값을 가져오면 된다.