티스토리 뷰

반응형

https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 다이나믹 프로그래밍

 


 

⊙ 문제 접근 과정

 

index 0 = red

index 1 = green

index 2 = blue

 

배열을 사용했다. 다 더하고 더한 N번째의 최솟값을 출력하였다.


 

⊙ 문제 풀이

 

#include <iostream>

using namespace std;

int N;
int result=0;
int dp[1001][3]={0,};

int main() {
    cin >> N;
    
    for(int i=1;i<=N;i++) {
        cin >> dp[i][0] >> dp[i][1] >> dp[i][2];
        
        dp[i][0]+=min(dp[i-1][1],dp[i-1][2]);
        dp[i][1]+=min(dp[i-1][0],dp[i-1][2]);
        dp[i][2]+=min(dp[i-1][0],dp[i-1][1]);
    }
    result = min(dp[N][0],min(dp[N][1],dp[N][2]));

    cout << result;
}

⊙ 결과

 


⊙ 마무리

 

 

DP의 풀이식을 보고나면 쉽고 간단해보이지만 그 코드를 생각하는데는 어렵다고 느낀다...

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 29 30 31
글 보관함