공부 자료/알고리즘

(Python/파이썬) 백준 1149번 - RGB거리

뚜루뚜루세니 2021. 8. 3. 10:08
728x90

문제출처: https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

1. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= int(input())
R,G,B = 0,1,2
 
#각 집 마다 색깔별 가격 
RGB = [list(map(int, input().split()))for i in range(n)]
 
#같은 색 연달아 불가
#현재가 R이면 GB 중 작은 값으로 
 
#  RGB[i][R] = i번째 집을 R
#  RGB[i][G] = i번째 집을 G
#  RGB[i][B] = i번째 집을 B
 
for i in range(1,n):
    RGB[i][R]=RGB[i][R]+min(RGB[i-1][G],RGB[i-1][B])
    RGB[i][G]=RGB[i][G]+min(RGB[i-1][R],RGB[i-1][B])
    RGB[i][B]=RGB[i][B]+min(RGB[i-1][G],RGB[i-1][R])
 
#빨강, 초록, 파랑으로 칠하는 경우 중 최소값 출력
print(min(RGB[n-1]))
cs

2. 해결과정

앞집에 대해서 색깔이 겹치지 않게 배치하는 것이 중요했던 문제였다.

처음에 각 집에 대한 색깔별 가격을 입력 받고, 반복문을 통해 2번째 집 부터 세가지 색상을 칠할 때의 상황을 고려해주면 된다.

결과적으로 RGB[n-1]칸에는 첫번째 집을 R로 칠했을 때 결과값, G로 칠했을 때 결과값, B를 선택했을 때 결과값이 담겨져 있고 그 중 가장 작은 값을 출력해주면 된다.

 

3. 느낀점

dp 어렵다.. 점화식을 찾아내는 것이 까다롭다.

728x90