알고리즘&자료구조/문제

[BOJ] 1149 RGB거리 C++

Nakuri 2023. 5. 15. 18:08
728x90

개요

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

 

1149번: RGB거리

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

www.acmicpc.net

 

풀이

DP 문제 몇 개 풀다보니까 이정도는 이제 어느정도 보이는 것 같다.

현재 가격은 이전 누적 가격 중 가능한 가장 저렴한 가격 + 현재 집 가격이다.

3가지 색상의 가격을 비교하며 모든 집을 채워 넣다보면 마지막 3가지 경우 중 작은 값이 정답이 된다.

 

코드

#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;

int main()
{
	cin.tie(0)->sync_with_stdio(0);
	int N;
	int cost[3];
	int dpCost[1000][3];

	cin >> N;
	for (int j = 0; j < 3; j++)
	{
		cin >> cost[j];
		dpCost[0][j] = cost[j];
	}
	for (int i = 1; i < N; i++)
	{
		for (int j = 0; j < 3; j++)
			cin >> cost[j];
		for (int j = 0; j < 3; j++)
		{
			int minCost = INT_MAX;
			for (int k = 0; k < 3; k++)
			{
				if (j == k) continue;
				minCost = min(minCost, cost[j] + dpCost[i - 1][k]);
			}
			dpCost[i][j] = minCost;
		}
	}
	int minDp = INT_MAX;
	for (int j = 0; j < 3; j++)
		minDp = min(minDp, dpCost[N - 1][j]);

	cout << minDp;
}

INT_MAX 사용시 climits를 include 해주어야 BOJ에서 컴파일 에러가 안난다,,

'알고리즘&자료구조 > 문제' 카테고리의 다른 글

[BOJ] 7490 0 만들기 C++  (0) 2023.05.29
[BOJ] 16990 마법 장벽 C++  (0) 2023.05.24
[BOJ] 4811 알약 C++  (0) 2023.05.15
[BOJ] 2302 극장 좌석 C++  (0) 2023.05.15
[BOJ] 9372 상근이의 여행 C++  (0) 2023.03.28