상세 컨텐츠

본문 제목

1149. RGB거리 성공

알고리즘/백준

by 아리따운노을 2020. 1. 15. 01:00

본문

삼성은 난이도가 적혀 있어서 문제를 고르기 수월한데 백준은... 좀 난해 하다

혹시 문제 고르는 요령이 있다면 댓글로 적어주길 바란다.


문제

RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이고, 첫 집과 마지막 집은 이웃이 아니다.

각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠하는 비용의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 집의 수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 각 집을 빨강으로, 초록으로, 파랑으로 칠하는 비용이 주어진다. 비용은 1,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 모든 집을 칠하는 비용의 최솟값을 출력한다.


이번 문제는 47%퍼센트의 정답률을 기록하고 있는 문제로 상당히 간단해 보인다.

알고리즘은 


1. 행렬을 입력 받고 새로운 거리 행렬을 만듬

2. 첫번째 행은 0 0 0으로 초기화

3. 1행 부터 만들어 나감 이 전 행과 똑같지 않은 두 개중 작은 것을 골라 더하기

4. 거리 행렬을 마지막까지 만든 후에 마지막 행중 가장 작은 것 출력


코드


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
#include <iostream>
using namespace std;
 
int N,MIN;
int MAP[1001][3], dist[1001][3];
 
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    cin>>N;
 
    for(int i=1;i<=N;i++)
        for(int j=0;j<3;j++)
            cin>>MAP[i][j];
    for(int i=1;i<=N;i++)
    {
        dist[i][0= min(dist[i-1][1], dist[i-1][2]) + MAP[i][0];
        dist[i][1= min(dist[i-1][0], dist[i-1][2]) + MAP[i][1];
        dist[i][2= min(dist[i-1][0], dist[i-1][1]) + MAP[i][2];
 
    }
    MIN = min(dist[N][0],min(dist[N][1], dist[N][2]));
    cout<<MIN<<'\n';
    return 0;
}
 
cs

 




'알고리즘 > 백준' 카테고리의 다른 글

10610. 30  (0) 2020.02.01
7576. 토마토  (0) 2020.01.20
2749. 피보나치 수 3  (0) 2020.01.19
9020. 골드바흐의 추측  (0) 2020.01.19
1261. 알고스팟  (0) 2020.01.13

관련글 더보기

댓글 영역