[코딩테스트 C++] RGB거리
오늘의 문제
https://www.acmicpc.net/problem/1149
RGB거리
문제 분석
- 최대 입력이 1000이므로 O(N^2) 정도의 알고리즘이면 충분하다.
- 앞의 선택이 다음에 영향을 미치므로, DP로 풀면 O(N)에 풀 수 있다. 이전까지 선택지 3가지에 대한 최선의 선택이 담겨있으며, 이번에는 그 중에서 고를 수 있는 것 중 제일 값이 덜 나가는것을 고르면 된다.
나의 풀이
#include <iostream>
using namespace std;
int n;
const int MAX = 1000;
int cost[MAX][3];
// RGB거리
int solution(){
int color[MAX][3];
color[0][0] = cost[0][0];
color[0][1] = cost[0][1];
color[0][2] = cost[0][2];
for(int i=1;i<n;i++){
color[i][0] = min(color[i-1][1], color[i-1][2]) + cost[i][0];
color[i][1] = min(color[i-1][0], color[i-1][2]) + cost[i][1];
color[i][2] = min(color[i-1][0], color[i-1][1]) + cost[i][2];
}
return min(color[n-1][0],min(color[n-1][1], color[n-1][2]));
}
다른 답안
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
int r,g,b,R,G,B,x,y,z;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&r,&g,&b);
if(i==0) {R=r; G=g; B=b; continue;}
x=min(G,B)+r;
y=min(R,B)+g;
z=min(R,G)+b;
R=x; G=y; B=z;
}
int ans=min(R,min(G,B));
printf("%d",ans);
}
배울 점
- 백준은 입력을 처리해서그런지 입력과 동시에 문제를 푼다.
Author And Source
이 문제에 관하여([코딩테스트 C++] RGB거리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@huijae0817/코딩테스트-C-RGB거리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)