๋ค์ด๊ฐ๋ฉฐ
๋ฌธ์ ์์ฒด์ ๋ํ ์ค๋ช ๊ณผ ์์ ํ ์คํธ์ผ์ด์ค๊ฐ ์งง์ ์ฌ๋ฌ ๊ฒฝ์ฐ๋ฅผ ๋ค ๊ณ ๋ คํ๋ ๊ฒ์ ์์์ ์๊ฐํด์ผ ํ์ต๋๋ค.
๊ทธ๋ฌ๋๊น Hard ๋จ๊ณ ๋ฌธ์ ์ด๊ฒ ์ง๋ง...
์ ๋ํ ์ค์ค๋ก ํ๊ณ ํ๋ฆฐ ์ดํ ๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ด๋ฐ ์ ๋ฐ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด์๋๋ฐ, ๋์์ด ๋ ๊น ์ถ์ด ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
๋ฌธ์ ํ์
1. n๊ฐ์ ์์
์ d์ผ ๋์ ์งํํ๊ณ , ํ๋ฃจ์ ์ต์ ํ๋์ ์ผ์ ํด์ผ ํ๋ค.
2. j์ ์์
์ ํ๊ธฐ ์ํด์๋ j-1 ์์
์ ์๋ฃํด์ผ ํ๋ค.
3. 6 4 2 4 ์ jobDifficulty๋ฅผ ๊ฐ์ง ์์
์ ํ๋ฃจ์ ํ๋ค๋ฉด ๊ทธ ๋ ์ ์ผ๋น์ ๊ตฌ๊ฐ์์ ์ต๋๊ฐ์ธ 6์ด ๋๋ค.
4. d์ผ ๋์ ์ต์ํ์ ์ด ์์ ์ผ๋น์ ๊ตฌํ๋ค.
5. ์์
์ ์๋ฃํ ์ ์๊ฑฐ๋ ์กฐ๊ฑด์ ๋ถํฉํ์ง ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
์ ๊ทผ ๋ฐฉ๋ฒ
์๋ฅผ ๋ค์ด [1,3,2,5,7,2,4,8] ์ d = 4 ์ผ๋์ ๋๋ ์ ์ฒ๋ฆฌํ๋ ์์๋ฅผ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
๋ฌธ์ ์์ ์์๋๋ก ์ผ์ ์งํํด์ผ ํ๋๋ฐ, ๋งค์ผ ์ต์ 1๊ฐ ์ด์์ ์์
์ ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ๊ณ ๋ฑํ๊ต ๋ ๋ฐฐ์ด ๋ด์ฉ์ด ๋ ์ค๋ฅผ ์ ์์ต๋๋ค.
์ ์ฒด ์ผ์์ ํ๋ฃจ์ 1๊ฐ์ฉ์ ์ผ๋จ ๋ฐฐ๋ถํ๊ณ ๋๋จธ์ง ๊ฐ์ ๋ฐฐ๋ถํ๋ฉด ์ ์ฒด ๋๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฉ๋๋ค.
์ฆ 8๊ฐ์ ์ผ์ 4์ผ ๋์ ๋๋๋ฉด
1 1 1 1 ์ ๊ฐ ํ๋ฃจ์ ๋ถ๋ฐฐํ๊ณ ๋๋จธ์ง 4๊ฐ์ ์ผ์ ๋ถ๋ฐฐํ๋๊ฑฐ์ฃ
2๊ฐ์ฉ ๋๋๋ ๊ฒฝ์ฐ
- 4 0
- 3 1
- 2 2
- 1 3
- 0 4
3๊ฐ์ฉ ๋๋๋ ๊ฒฝ์ฐ
- 1 1 2
- 1 2 1
- 2 1 1
4๊ฐ์ฉ ๋๋๋ ๊ฒฝ์ฐ
- 1 1 1 1
์ฆ, ์ ์ฒด ๋ฐฐ์ด์์ ์นธ๋ง์ด๋ฅผ ์ด๋์ ๋์ด์ผ ํ๋์ง ๊ณจ๋ผ์ผ ํฉ๋๋ค.

์ ๋ ์ฌ์ค ์ฌ๊ธฐ๊น์ง๋ง ์๊ฐํ๊ณ , ์ ๊ทผ๋ฐ ์ด๋ฌ๋ฉด ์ด๊ฑฐ๋ฅผ ๋ค ๊ตฌํด์ผ ํ๋? ์๊ฐ์ด๊ณผ๋๋๋ฐ... ํ๊ณ ๊ตฌํํ์ง ๋ชปํ์ต๋๋ค
์ด๋ฐ์์ผ๋ก ์นธ์ ๋๋๋ฉด
- 1์ผ์งธ์ 1
- 2์ผ์งธ์ 3
- 3์ผ์งธ์ 2
- 4์ผ์งธ์๋ ์ต๋๊ฐ์ธ 8์ jobDifficulty๋ก ๊ฐ์ง๊ฒ ๋ฉ๋๋ค

์นธ๋ง์ด๋ฅผ ์ ๊ทธ๋ฆผ์ฒ๋ผ ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ๋์ ์ ์์ต๋๋ค.
1์ผ์ฐจ์ 1๊ฐ์ ์ผ๋ง ํ๋ค๊ณ ์๊ฐํ๊ณ , 2์ผ์ฐจ๋ถํฐ ๋ณด๋ฉด 2์ผ์ฐจ์ ํ๋ ์ผ์ ์์ ๊ฐ์ด ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ํ์ฌ ๋ ์ง, ์์
์ โ 2๊ฐ์ ๋ณ์๊ฐ ๋ฐ๋๊ณ ์์ต๋๋ค โ dp๋ 2์ฐจ์ ๋ฐฐ์ด์
๋๋ค.
i๋ ์ผ, j๋ ์์
์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ผ ์ด์ dp๊ฐ ์ ํํ ๋ฌด์์ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋์ง ๋ณด๊ฒ ์ต๋๋ค

2์ผ์ฐจ์ ์ฌ๋ฌ๊ฐ์ง ์ผ์ ํ๋ค๋ฉด ๊ทธ ์ค ๊ฐ์ฅ jobDifficulty๊ฐ ๋์ ์ผ์ด ํด๋น ์์ผ์ ์์๋ difficulty์ผ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ ์ต์ข
์ ์ผ๋ก ์ด d์ผ๋์ ์์๋ ์ต์ difficulty์ ํฉ์ ๊ตฌํด์ผ ํ๋ฏ๋ก
dp[i][j]์๋ i์ผ์ j๋ฒ์งธ ๊น์ง ์ผ์ ํ์ ๋ ์์๋๋ ์ต์ ํฉ ์ผ๋ก ํ๊ฒ ์ต๋๋ค

์ด๊ธฐํํ๊ธฐ

์ด๊ธฐํ๋ฅผ ํ ๋๋ ๋งค์ผ ์ต์ 1๊ฐ์ฉ์ ์์
์ ํด์ผ ํ๋ฏ๋ก
1 ~ โค n - d + 1๊น์ง ์ด๊ธฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
1์ผ์ฐจ์๋ ๋ฒ์ ๋ด ์์
์ค ์ต๋๊ฐ์ ์ฐพ์ผ๋ฉด ๋ฉ๋๋ค.
- 1
- 1 , 3
- 1, 3, 2
- 1, 3, 2, 5
- 1, 3, 2, 5, 7
์ด๋ฏ๋ก ๋ฒ์๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ํ์ง ์๊ณ , dp[i][j-1]์๋ ์ง์ ๊น์ง์ ์ต๋๊ฐ์ด๋ฏ๋ก ์ง์ ๊ฐ๊ณผ ์ต๋๊ฐ์ ๋น๊ต ๊ฐฑ์ ํฉ๋๋ค.

2์ผ์ฐจ์๋ 1์ผ์ฐจ๊น์ง ํ๋ ์์
+ ํ์ฌ ๋ฒ์์์ ์ต๋๊ฐ์ ๋ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
dp[i][j]๋ i๋ฒ์งธ ์ผ์ j๋ฒ ์์
์ ํ ๋์ ์ต์ ๋์ ํฉ์
๋๋ค. ์ฆ,

3๋ฒ์งธ ์ผ, ์ฆ ์ฌ๊ธฐ์ ๋๊ทธ๋ผ๋ฏธํ 2๋ฒ ์ผ์ ํ ๋
๊ทธ ์ ๋ ์ธ 1์ผ์ฐจ์ ํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ ์ ์์ต๋๋ค.
์ด๊ฒ์ dp์ ์ ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

์ด๋ ์ถ๊ฐ ์ต์ ํ๋ฅผ ํ๋ ๊ณผ์ ์์ ์ญ์์ผ๋ก dp๊ฐ์ ๊ฐฑ์ ํ๋ฉด ์ฐ์ฐ์ ์ค์ผ ์ ์์ต๋๋ค.

์ด ๊ทธ๋ฆผ์ฒ๋ผ dp[2][4] ์ผ๋ ์ ๋ ์ ํ ์์
์ผ๋น์์ ํ์ฌ ๊ตฌ๊ฐ์ ์ต๋๊ฐ์ ๊ตฌํ ์ต์ ๊ฐ์ ๊ตฌํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๋ฐฉํฅ์ผ๋ก ํ๋ฉด ๋ฒ์๋ฅผ ์ฒ์๋ถํฐ ~ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ๋ฉฐ max ๊ฐ์ ๊ตฌํด์ผ ํฉ๋๋ค.
ํ์ง๋ง ์ญ๋ฐฉํฅ์ผ๋ก ํ๋ฉด max ๊ฐ๋ง ๊ฐฑ์ ํ๋ฉด์ O(1) ์๊ฐ๋ณต์ก๋๋ก ์ต๋๊ฐ์ ๊ตฌํ ์ ์์ต๋๋ค.
์ฝ๋ ๊ตฌํ
import java.util.*;
class Solution {
static final int INF = Integer.MAX_VALUE;
public int minDifficulty(int[] jobDifficulty, int d) {
int n = jobDifficulty.length;
if ( n < d ) return -1;
int[][] dp = new int[d+1][n+1];
// 1. ์ด๊ธฐํ
dp[1][1] = jobDifficulty[0];
for(int i = 2; i <= n - d + 1; i++){
dp[1][i] = Math.max(dp[1][i-1], jobDifficulty[i-1]);
}
// 2. 2์ผ์ฐจ๋ถํฐ d์ผ์ฐจ๊น์ง
for (int r = 2; r <= d; r++) {
for (int c = r; c <= n-d+r; c++) {
int maxDiff = 0;
dp[r][c] = Integer.MAX_VALUE;
// ์ญ๋ฐฉํฅ์ผ๋ก ํ์ํ๋ฉฐ ์ต๋๊ฐ ๊ฐฑ์
for (int k = c; k >= r; k--) {
maxDiff = Math.max(maxDiff, jobDifficulty[k-1]);
dp[r][c] = Math.min(dp[r][c], dp[r-1][k-1] + maxDiff);
}
}
}
return dp[d][n];
}
}
