https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
이 문제는 각 층마다의 최솟값을 구하여 더하는 게 아니라 모든 경로의 경우의 수를 구하여 그 값 중 최솟값을 찾아야한다.
결과적으로 마지막에 RGB 중 R을 선택하는 경우, G를 선택하는 경우, B를 선택하는 경우 중 가장 최솟값을 찾아야한다.
https://st-lab.tistory.com/128 다음 블로그를 참고하여 쉽게 이해할 수 있었다.
[백준] 1149번 : RGB거리 - JAVA[자바]
www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다.
st-lab.tistory.com
코드
import java.io.*;
import java.util.*;
public class Main{
static int rgb[][];
static int price[][];
static int fibo(int n, int index)
{
if(price[n][index]==0)
{
if(index==0)
{
price[n][index] = Math.min(fibo(n-1,1),fibo(n-1,2)) + rgb[n][index];
}
else if(index==1)
{
price[n][index] = Math.min(fibo(n-1,0),fibo(n-1,2))+ rgb[n][index];
}
else {
price[n][index] = Math.min(fibo(n-1,0),fibo(n-1,1))+ rgb[n][index];
}
}
return price[n][index];
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
rgb = new int[N][3];
price = new int[N][3];
for(int i=0;i<N;i++)
{
for(int j=0;j<3;j++)
{
rgb[i][j] = sc.nextInt();
}
}
price[0][0]=rgb[0][0];
price[0][1]=rgb[0][1];
price[0][2]=rgb[0][2];
System.out.println(Math.min(fibo(N-1,2),Math.min(fibo(N-1,0),fibo(N-1,1))));
}
}
'알고리즘 > 백준 풀이(동적 프로그래밍)' 카테고리의 다른 글
백준 2156번 - 포도주 시식 (1) | 2024.01.08 |
---|---|
백준 1912번 - 연속합 (2) | 2024.01.05 |
백준 1003번 - 피보나치 함수 (0) | 2024.01.02 |
백준 12865번 - 평범한 배낭(미해결) (0) | 2023.12.31 |
백준 2839번 - 설탕 배달 (1) | 2023.12.30 |