티스토리 뷰

Algorithm/동적프로그래밍

백준 1149 RGB거리

선비마을송 2018. 9. 28. 10:49

동적 프로그래밍을 이용해 해결할 수 있는 문제입니다. 

이 문제에서 제가 틀렸던 부분은 무조건 최소만을 생각하여 문제를 푸는 방식이였습니다. 

0을 R, 1을 G, 2를 B라고 하겠습니다.

제가 틀렸던 부분은 다음의 표의 상황입니다. 


 

 home[i][0]

home[i][1] 

home[i][2] 

i=1

 1

 1000

2000 

i=2 

 1

 2000

1000

i=3 

 2000

1000

1


만약 단순 최소값만을 이용하면 답은 1+1000+1000 이 됩니다. 

저희가 원하는 정답은 1000+1+1 이므로 최소값만을 고려하면 문제를 해결할 수 없습니다. 


이 문제는 모든 경우를 다 생각해 값을 구해놓고 그 중 최소를 찾는 문제입니다. 


문제에서 주어진 예시를 이용해 표를 그려보겠습니다. 


 

home[i][0] 

home[i][1] 

home[i][2] 

i=1 

26 

40 

83 

i=2 

49 

60 

57 

i=3 

13 

89 

99 



입력으로 들어온 값을 2차원 배열 home에 저장한 모습입니다. 

현재 집을 R로 칠하는 경우의 값은, 이전 집은 G나 B로 칠하고 현재 R을 칠하는 비용을 합한 값입니다. 

점화식으로 나타내면 다음과 같습니다. 


dp[i][0]=min(dp[i-1][1], dp[i-1][2])+home[i][0]


G와 B도 같은 점화식을 사용하면 됩니다. 


점화식을 이용해 표를 그려보겠습니다. 


 

 dp[i][0]

dp[i][1] 

dp[i][2] 

i=1 

min(dp[0][1],dp[0][2])+26=26

min(dp[0][0],dp[0][2])+40=40 

min(dp[0][0],dp[0][1])+83=83 

i=2 

min(dp[1][1],dp[1][2])+49=89 

min(dp[1][0],dp[1][2])+60=86 

min(dp[1][0],dp[1][1])+57=83 

i=3 

min(dp[2][1],dp[0][2])+13=96 

min(dp[2][0],dp[2][2])+89=172 

min(dp[2][0],dp[2][1])+99=185 


저희가 원하는 답은 96입니다. 


코드는 아래와 같습니다.


#include <iostream>

using namespace std;

int min(int x, int y)
{
	return x < y ? x : y;
}

int main()
{
	int home[1001][3] = { 0 };
	int dp[1001][3] = { 0 };
	int T;

	cin >> T;
	for (int i = 1;i <= T;i++) {
		for (int j = 0;j < 3;j++) {
			cin >> home[i][j];
		}
	}

	for (int i = 1;i <= T;i++) {
		dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + home[i][0];
		dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + home[i][1];
		dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + home[i][2];
	}

	cout << min(min(dp[T][0], dp[T][1]), dp[T][2]);

	return 0;
}



' Algorithm > 동적프로그래밍' 카테고리의 다른 글

백준 2579 계단 오르기  (0) 2018.09.28
백준 1932 정수 삼각형  (0) 2018.09.28
백준 9095 1, 2, 3 더하기  (0) 2018.09.27
백준 2294 동전2  (0) 2018.09.21
백준 3908 서로 다른 소수의 합  (0) 2018.09.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함