문제 설명
https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
해결 방법
두번째 집부터 마지막 집까지 살펴보자.
house[1][0] += min(house[0][1], house[0][2]);
두번째 집을 빨강으로 칠하는 비용 += 첫번째 집을 칠할 초록 혹은 파랑 중 더 저렴한 비용.
house[1][1] += min(house[0][0], house[0][2]);
두번째 집을 초록으로 칠하는 비용 += 첫번째 집을 칠할 빨강 혹은 파랑 중 더 저렴한 비용.
house[1][2] += min(house[0][0], house[0][1]);
두번째 집을 파랑으로 칠하는 비용 += 첫번째 집을 칠할 빨강 혹은 초록 중 더 저렴한 비용.
마지막 집까지 반복한 후
가장 숫자가 작은값을 결과로 보낸다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int min(int a, int b)
{
if (a < b)return a;
return b;
}
int main()
{
//INPUT
int n; cin >> n;
vector<vector<int>>house(n, (vector<int>(3,0)));
for (int i = 0; i < n; i++)
{ cin >> house[i][0] >> house[i][1] >> house[i][2]; }
//SEARCH
for (int i = 1; i < n; i++)
{
house[i][0] += min(house[i - 1][1], house[i - 1][2]);
house[i][1] += min(house[i - 1][0], house[i - 1][2]);
house[i][2] += min(house[i - 1][0], house[i - 1][1]);
}
int result = min(house[n-1][0], house[n-1][1]);
result= min(result, house[n-1][2]);
cout << result;
}
'개발 > 백준' 카테고리의 다른 글
[백준] 14501번. 퇴사 (C++) (4) | 2024.01.05 |
---|---|
[백준] 1932번. 정수 삼각형 (C++) (1) | 2024.01.02 |
[백준] 1003번. 피보나치 함수 (C++) (0) | 2023.12.27 |
[백준] 19941번. 햄버거 분배 (1) | 2023.12.26 |
[백준] 18310번. 안테나 (C++) (0) | 2023.12.26 |