Algorithm/λ°±μ€
λ°±μ€ 1149λ² : RGB거리 (Java)
skyey94
2022. 1. 17. 01:45
π λ¬Έμ λ§ν¬
1149λ²: RGB거리
첫째 μ€μ μ§μ μ N(2 ≤ N ≤ 1,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ κ° μ§μ λΉ¨κ°, μ΄λ‘, νλμΌλ‘ μΉ νλ λΉμ©μ΄ 1λ² μ§λΆν° ν μ€μ νλμ© μ£Όμ΄μ§λ€. μ§μ μΉ νλ λΉμ©μ 1,000λ³΄λ€ μκ±°λ
www.acmicpc.net
π νμ΄ κ³Όμ
- λ€μ΄λλ―Ή νλ‘κ·Έλλ° μ ν + μ¬κ· μ νμ λ¬Έμ μ
λλ€.
- λ¬Έμ μ 쑰건μ μ’
ν©ν΄λ³΄λ©΄, νμ¬ μΈλ±μ€μ μ΅μκ°μ λ°λ‘ μ§μ μκΉμ μ μΈν λ€λ₯Έ λκ°μ§ μκΉμ€μμ μ΅μκ°μ λν κ°μ
λλ€.
- κ·Έλ κΈ°μ μ΄λ ν ν μκΉμ νΉμ μΈλ±μ€μμμ κ°μ μ΄μ μκΉμ μ μΈν λκ°μ§ μκΉμ€μ μ΅μκ°μ ꡬν΄μΌ ν©λλ€.
- μ΄λ¬ν λ°©μμΌλ‘ λ΅μ μ°Ύμλκ°λ©΄, λ΅μ΄ λ μ μλ κ°μ λΉ¨κ°μ, μ΄λ‘μ, νλμ 3κ°μ§μ
λλ€.
- λ°λΌμ, μ΄ μΈκ°μ§ κ°μ λν dp λ°°μ΄μ μ΅μκ°μ μΆλ ₯νλ©΄ λ΅μ
λλ€.
- μλ§, κΈλ‘ μμ±ν΄μλ μ΄ν΄κ° λμ§ μμ μ μμ΅λλ€. κ·Έλ λ€λ©΄, solve λ©μλμ λ‘μ§μ νλμ© λ°λΌκ°λ³΄μλ©΄ νλ¦μ μ΄ν΄νμ€ μ μμ κ²λλ€.
π» μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n,answer;
static int[][] arr;
static int[][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = new int[n][3];
dp = new int[n][3];
answer = 0;
for(int i = 0; i< n; i++){
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int j = 0; j< 3; j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
dp[0][0] = arr[0][0];
dp[0][1] = arr[0][1];
dp[0][2] = arr[0][2];
int answer = Math.min(solve(n-1,0),Math.min(solve(n-1,1),solve(n-1,2)));
System.out.println(answer);
}
private static int solve(int idx, int color){
if(dp[idx][color] == 0){
if(color == 0){
dp[idx][0] = Math.min(solve(idx-1,1),solve(idx-1,2)) + arr[idx][0];
}else if(color == 1){
dp[idx][1] = Math.min(solve(idx-1,0),solve(idx-1,2)) + arr[idx][1];
}else if(color == 2){
dp[idx][2] = Math.min(solve(idx-1,0),solve(idx-1,1)) + arr[idx][2];
}
}
return dp[idx][color];
}
}