バー準1149 RGB距離
16071 ワード
バー準1149 RGB距離
バー準1149 RGB距離
実施前の考え方
前の色を比較すると、前の色の値と現在の色の値を比較します->より小さい色を選択します.
残念な点
実装前にコードを意図的に記述すれば,地域最小値を見つけることができるが,全体的には最小値ではない可能性が高い->従ってDPを用いて解決する.まだDPが见つからないみたいこれは確かに有効なアルゴリズムなので、もう少し勉強しましょう.
コード#コード#
package com.study37;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class backjoon_1149_RGB거리 {
static int N;
static int[][] color;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
color = new int[N][3]; //N번째 집을 (빨강, 초록, 파랑으로 ) 칠하는 비용
int[][] D = new int[N][3]; //N번째 집을 (빨강, 초록, 파랑으로 ) 칠하는 비용의 최소값 모든 집을 칠하는 비용의 최소값
StringTokenizer st = null;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 3; j++) {
color[i][j]=Integer.parseInt(st.nextToken());
}
}
//초기값 -> 첫번째 집을 칠할떄의 비용(집이 한채 밖에 없다를 가정)
D[0][0]=color[0][0];
D[0][1]=color[0][1];
D[0][2]=color[0][2];
//N번재 집의 칠 비용은 n-1번째 집의 가능한 칠 비용 중 더 작은 값으로 선택하면 최소 비용 나올 수 있음
for (int i = 1; i < N; i++) {
D[i][0]=Math.min(D[i-1][1],D[i-1][2]) + color[i][0];
D[i][1]=Math.min(D[i-1][0],D[i-1][2]) + color[i][1];
D[i][2]=Math.min(D[i-1][0],D[i-1][1]) + color[i][2];
}
//n번째 집 까지 칠했을 때의 최소 비용
System.out.println(Math.min(Math.min(D[N-1][0],D[N-1][1]),D[N-1][2]));
}
}
Reference
この問題について(バー準1149 RGB距離), 我々は、より多くの情報をここで見つけました https://velog.io/@jeus95/백준-1149-RGB거리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol