일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Java 지네릭스(Generics)에 대하여 알아보겠습니다.
- recyclerview
- node.js
- SlidingRootNav
- android
- 백준
- EventEmitter
- 자바
- navigation
- HTTP
- 라이브러리
- android list
- 알고리즘
- 안드로이드
- 네이게이션 드로우
- databinding
- Today
- Total
삽질개발
[Mindev 개발공부]알고리즘 백준 1149번 RGB거리 Java 풀이 본문
문제는 다음과 같습니다.
접근방법
문제 예제를 보고 2차원 배열로 접근하였습니다.
여기서 힌트를 언게 되었습니다.
일단 첫번째줄은 가장 처음시작이니 3개의 숫자중 가장 작은수로 접근하면됩니다.
두번째줄부터는 각각 각각 숫자로 접근했을때 전의 값들을 유추 해보게 되었습니다.
예를들어 두번째줄의 60의 수에 접근하게될때
전의 값을 유추 해볼때에는 첫번째 26 과 83 둘중 작은값이 되겠습니다.
이런 방법으로 2차원 배열을 봤을때
for (int i = 1; i < n; i++) {
dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + list[i][0];
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + list[i][1];
dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + list[i][2];
}
이러한 식을 얻을수있습니다.
전체 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] list = new int[n][3];
int[][] dp = new int[n][3];
int sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
list[i][j] = sc.nextInt();
}
}
dp[0][0] = list[0][0];
dp[0][1] = list[0][1];
dp[0][2] = list[0][2];
for (int i = 1; i < n; i++) {
dp[i][0] = Math.min(dp[i - 1][1], dp[i - 1][2]) + list[i][0];
dp[i][1] = Math.min(dp[i - 1][0], dp[i - 1][2]) + list[i][1];
dp[i][2] = Math.min(dp[i - 1][0], dp[i - 1][1]) + list[i][2];
}
System.out.println(Math.min(Math.min(dp[n - 1][0], dp[n - 1][1]), dp[n - 1][2]));
}
}
'Algorithm' 카테고리의 다른 글
[Mindev 개발공부]알고리즘 백준 9375번 패션왕 신해빈 Java 풀이 (0) | 2018.05.23 |
---|---|
[Mindev 개발공부]알고리즘 백준 11050번 이항 계수 1 Java 풀이 (0) | 2018.05.23 |
[Mindev 개발공부]알고리즘 백준 1932번 정수 삼각형 Java 풀이 (0) | 2018.05.21 |