Algorithm/📖Baekjoon
#1149 RGB거리
yewoneeee
2022. 5. 10. 20:32
# 문제
# 입력 및 출력
# 풀이
혼자 해결해보려고 고민을 해봤지만 결국 실패했다ㅋㅋㅋ
이전 집의 색에 초점을 맞춰서 풀다 보니까 도저히 방법을 모르겠더라
예를 들어 첫번째 집에 빨간색을 칠하면 두번째집은 초록 파란색이 가능하고, 두번째 집에서 초록을 선택한게 최소 값이라면 세번째 집에선 빨강, 파랑이 가능하고,, 이런식으로 풀었더니 너무 복잡해졌다
https://blog.naver.com/PostView.nhn?blogId=chltmddus23&logNo=221704940464
[백준1149] RGB거리 - c++
해결 방법: DP 이 문제는 DP의 가장 기본적인 문제이다! (라고 알고리즘 문제 잘 푸는 친구가 그랬다 ,...
blog.naver.com
위 블로그의 설명을 읽으면서 방법을 찾았다
i번째 집에 각 색을 칠하는 비용을 초점에 두고 풀면 된다
i번째 집에 빨간색을 칠하게 된다면 이전 집의 초록, 파랑색을 칠한 경우에 빨간색을 칠하는 비용을 더해
최소값을 찾는 방식을 계속해서 반복하면 된다
내가 생각했던 건 i-1번째 집이 빨간색이면 i번째 집은 초록 파랑만 보도록 해서 문제가 있었던 것이다
#include <iostream>
#include <algorithm>
#pragma warning (disable:4996)
using namespace std;
int color[1001][3];
int main() {
int n, r, g, b;
cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%d %d %d", &r, &g, &b);
color[i][0] = min(color[i - 1][1] + r, color[i - 1][2] + r);
color[i][1] = min(color[i - 1][0] + g, color[i - 1][2] + g);
color[i][2] = min(color[i - 1][0] + b, color[i - 1][1] + b);
}
cout << min({ color[n][0], color[n][1], color[n][2] }) << "\n";
}
코드 자체는 간단함