문제 링크
https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
문제
RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다.
집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
- 1번 집의 색은 2번 집의 색과 같지 않아야 한다.
- N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.
- i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.
입력
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 같은 자연수이다..
출력
첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.
예제
더보기
입력 1
3
26 40 83
49 60 57
13 89 99
출력 1
96
입력 2
3
1 100 100
100 1 100
100 100 1
출력 2
3
입력 3
3
1 100 100
100 100 100
1 100 100
출력 3
102
입력 4
6
30 19 5
64 77 64
15 19 97
4 71 57
90 86 84
93 32 91
출력 4
208
입력 5
8
71 39 44
32 83 55
51 37 63
89 29 100
83 58 11
65 13 15
47 25 29
60 66 19
출력 5
253
풀이
- 다이나믹 프로그래밍(DP)
- N=2 부터 반복문 수행
- N-1의 색중에서, 자신과 다른 색을 비교하여 둘중 작은 값을 더해준다.
- 색이 3개밖에 없으므로 2가지색만 비교
소스 코드
n = int(input())
rgb_graph = []
for i in range(n):
rgb_graph.append(list(map(int, input().split())))
for i in range(1, n):
rgb_graph[i][0] = rgb_graph[i][0] + min(rgb_graph[i-1][1], rgb_graph[i-1][2])
rgb_graph[i][1] = rgb_graph[i][1] + min(rgb_graph[i-1][0], rgb_graph[i-1][2])
rgb_graph[i][2] = rgb_graph[i][2] + min(rgb_graph[i-1][0], rgb_graph[i-1][1])
print(min(rgb_graph[n-1]))
'코딩테스트' 카테고리의 다른 글
[백준/1436번/파이썬(Python)] 영화감독 숌 (0) | 2022.06.09 |
---|---|
[백준/1463번/파이썬(Python)] 1로 만들기 (0) | 2022.06.07 |
[백준/1932번/파이썬(Python)] 정수 삼각형 (0) | 2022.06.04 |
[백준/7576번/파이썬(Python)] 토마토 (0) | 2022.06.03 |
[백준/2667번/파이썬(Python)] 단지번호붙이기 (0) | 2022.06.02 |
댓글