문제 링크입니다: https://www.acmicpc.net/problem/1149
동적계획법이 부족하다고 느껴져 백준 알고리즘 사이트의 동적계획법 기초라는 항목 내에 있는 문제를 풀었습니다.
/*
모든 이웃은 같은 색을 칠할 수 없는 규칙이 적용된 거리가 있다
각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때,
모든 집을 칠할 때 드는 비용의 최솟값을 구하는 프로그램을 작성하시오.
*/
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int cache[3] = { 0 }; //i-1번째 집을 칠하는 비용
int minCost(void)
{
int RGB[3];
int red, green, blue;
cin >> red >> green >> blue;
RGB[0] = red, RGB[1] = green, RGB[2] = blue;
for (int i = 1; i < N; i++)
{
cin >> red >> green >> blue;
for (int i = 0; i < 3; i++)
cache[i] = RGB[i]; //0번부터 i-1번째 집까지 칠하는 비용 초기화
RGB[0] = red + min(cache[1], cache[2]); //red + i-1번째 집 중 green과 blue 중 작은 값
RGB[1] = green + min(cache[0], cache[2]);
RGB[2] = blue + min(cache[0], cache[1]);
}
return RGB[0] > RGB[1] ? (RGB[1] > RGB[2] ? RGB[2] : RGB[1]) : (RGB[0] > RGB[2]?RGB[2] : RGB[0]); //제일 작은 값 반환
}
int main(void)
{
cin >> N;
if (N < 1 || N>1000)
exit(-1);
cout << minCost() << endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1463번 1로 만들기 (0) | 2018.02.02 |
---|---|
백준 2579번 계단 오르기 (0) | 2018.02.02 |
백준 1932번 숫자삼각형 (2) | 2018.02.02 |
백준 1003번 피보나치 함수(DP 사용) (0) | 2018.02.01 |
백준 2133번 타일 채우기 (0) | 2018.01.28 |