알고리즘/BOJ

백준 1149번 RGB거리

꾸준함. 2018. 2. 1. 22:07

문제 링크입니다: 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