๋ฌธ์
RGB๊ฑฐ๋ฆฌ์๋ ์ง์ด N๊ฐ ์๋ค. ๊ฑฐ๋ฆฌ๋ ์ ๋ถ์ผ๋ก ๋ํ๋ผ ์ ์๊ณ , 1๋ฒ ์ง๋ถํฐ N๋ฒ ์ง์ด ์์๋๋ก ์๋ค.
์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋ ์ค ํ๋์ ์์ผ๋ก ์น ํด์ผ ํ๋ค. ๊ฐ๊ฐ์ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, ์๋ ๊ท์น์ ๋ง์กฑํ๋ฉด์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํด๋ณด์.
- 1๋ฒ ์ง์ ์์ 2๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- N๋ฒ ์ง์ ์์ N-1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
- i(2 ≤ i ≤ N-1)๋ฒ ์ง์ ์์ i-1๋ฒ, i+1๋ฒ ์ง์ ์๊ณผ ๊ฐ์ง ์์์ผ ํ๋ค.
## ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง์ ์ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฐ ์ง์ ๋นจ๊ฐ, ์ด๋ก, ํ๋์ผ๋ก ์น ํ๋ ๋น์ฉ์ด 1๋ฒ ์ง๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ์ง์ ์น ํ๋ ๋น์ฉ์ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
## ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ์ง์ ์น ํ๋ ๋น์ฉ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
0.5 ์ด (์ถ๊ฐ ์๊ฐ ์์) | 128 MB | 105821 | 58495 | 43577 | 54.494% |
https://www.acmicpc.net/problem/1149
ํ์ด
์๊ณ ๋ฆฌ์ฆ ํ๋ฆ + ์ฝ๋
์ฒซ๋ฒ์งธ ์๋
package ๊ธฐ์ด1.Day19.์ ํด์;
import java.util.Scanner;
public class RGB๊ฑฐ๋ฆฌ {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //์ง์ ์
int[] dp =new int[n+1];
int[][] arr = new int[n+1][3];
int index = 4;
for(int i=1; i<=n; i++){
for(int j=0; j<3; j++){
arr[i][j] = sc.nextInt();
}
}
for(int i=1; i<=n; i++){
dp[i] = Integer.MAX_VALUE;
for(int j=0; j<3; j++){
if(index != j){
dp[i] = Math.min(dp[i], arr[i][j]);
index = j;
}
}
}
int result = 0;
for(int i=1; i<=n; i++){
result += dp[i];
}
System.out.println(result);
sc.close();
}
}
์คํจ..!
์ด๋ ๊ฒ ์์ฑํ๊ณ ๋๋ ค๋ณด๋ ๋ฌธ์ ๊ฐ ์์๋ค.
if(index != j){
dp[i] = Math.min(dp[i], arr[i][j]);
index = j;
}
์ฌ๊ธฐ์ ๋ฌด์กฐ๊ฑด ์ฒซ๋ฒ์งธ ๋ถํฐ ๋๋ฉฐ 1๋ฒ์ง์ ์ต์๊ฐ์ ๊ฐ๊ฒ๋๋ฉฐ ์์ํ๋ค. ํ์ง๋ง 1๋ฒ์ง์์ ๋ ์ต์๊ฐ์ด, ์ ์ฒด์ ์ผ๋ก ๋ดค์๋ ์ต์๊ฐ์ ๋ณด์ฅํ์ง ์๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋
๊ฐ์ง์ ์ต์๊ฐ์ ๊ตฌํด ๋์ ํฉ์ ๊ตฌํ๋ ๊ฒ์ด ์๋, ๋ชจ๋ ๊ฒฝ๋ก์ ์๋ฅผ ์ฐพ์์ ์ต์ข ์ ์ผ๋ก ์์ ๋์ ํฉ์ ์ฐพ์์ผ ํ๋ค.
//Red์ผ ๊ฒฝ์ฐ
Cost[N][0] = min( Cost[N-1][1], Cost[N-1][2] ) + Cost[N][0]
//Green์ผ ๊ฒฝ์ฐ
Cost[N][1] = min( Cost[N-1][0], Cost[N-1][2] ) + Cost[N][1]
//Blue์ผ ๊ฒฝ์ฐ
Cost[N][2] = min( Cost[N-1][0], Cost[N-1][1] ) + Cost[N][2]
๋๋ฒ์งธ ์๋
import java.util.Scanner;
public class Main {
static int Red = 0;
static int Green = 1;
static int Blue = 2;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //์ง์ ์
int[][] arr = new int[n][3];
for(int i=0; i<n; i++){
arr[i][Red] = sc.nextInt();
arr[i][Green] = sc.nextInt();
arr[i][Blue] = sc.nextInt();
}
for(int i=1; i<n; i++){
arr[i][Red] += Math.min(arr[i - 1][Green], arr[i - 1][Blue]);
arr[i][Green] += Math.min(arr[i - 1][Red], arr[i - 1][Blue]);
arr[i][Blue] += Math.min(arr[i - 1][Red], arr[i - 1][Green]);
}
//n-1๊น์ง ๊ตฌํด๋๊ณ ๋ง์ง๋ง์ผ๋ก ๊ทธ๋ค์ค ์ต์๊ฐ์ ๊ตฌํด์ค๋ค.
//arr์๋ ๋์ ํฉ์ด ์์ฌ์๋๊ฒ์ด๋ค.
System.out.println(Math.min(Math.min(arr[n-1][Red], arr[n-1][Green]),arr[n-1][Blue]));
sc.close();
}
}
์ด๋ ๊ฒ ์์ฑํด์ ์ฑ๊ณต!