[LeetCode] DP : Minimum Difficulty of a Job Schedule (Java)

2025. 10. 22. 01:08ยท๐Ÿ’œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๐Ÿ’œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
728x90

๋“ค์–ด๊ฐ€๋ฉฐ

๋ฌธ์ œ ์ž์ฒด์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์˜ˆ์ œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ์งง์•„ ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„์„œ ์ƒ๊ฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. 
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ 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๋ฒˆ์งธ ๊นŒ์ง€ ์ผ์„ ํ–ˆ์„ ๋•Œ ์†Œ์š”๋˜๋Š” ์ตœ์†Œ ํ•ฉ ์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค
 

๋นจ๊ฐ„์ƒ‰์œผ๋กœ dp์˜ ๋‚ด์šฉ์ด ์ถ”๊ฐ€

 
 

์ดˆ๊ธฐํ™”ํ•˜๊ธฐ

 
์ดˆ๊ธฐํ™”๋ฅผ ํ•  ๋•Œ๋Š” ๋งค์ผ ์ตœ์†Œ 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]์—๋Š” ์ง์ „๊นŒ์ง€์˜ ์ตœ๋Œ“๊ฐ’์ด๋ฏ€๋กœ ์ง์ „ ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์„ ๋น„๊ต ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
 
 

์œ„ ๊ทธ๋ฆผ์—์„œ max(1~1๋ฒˆ ์ž‘์—…) ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. job์€ 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ•˜๋‹ˆ๊นŒ์š”. ๊ทธ๋ฆผ์— ์ž˜๋ชป ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 
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];
    }
}

 

728x90
'๐Ÿ’œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๐Ÿ’œ ์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๊ทธ๋ฆฌ๋””] ๋ชจํ—˜๊ฐ€๊ธธ๋“œ (ํŒŒ์ด์ฌ)
eyes from es
eyes from es
  • eyes from es
    eyes from es
    eyes from es
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • โค๏ธ ๊ฟ€ํŒ ๋ชจ์Œ
        • โค๏ธ ๊ฐ“์ƒ ๊ฟ€ํŒ
        • โค๏ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๐Ÿงก Projects
        • ๐Ÿงก Projects: Web
        • ๐ŸŽคPreterview
        • ๐Ÿงก Projects: App
        • ๐Ÿงก๋Œ€์™ธํ™œ๋™
        • ๐Ÿงก OSCCA ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ
      • ๐Ÿ’› Frontend
        • ๐Ÿ’› Frontend : React
        • ๐Ÿ’› Frontend : JavaScript
        • ๐Ÿ’› Frontend : TypeScript
      • ๐Ÿ’š Backend
      • ๐Ÿ’™ OS: ์šด์˜์ฒด์ œ
        • ๐Ÿ’™ Linux
      • ๐Ÿ’œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
        • ๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ
        • ๐Ÿ’œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        • ๐Ÿ’œ ๋ฐฑ์ค€
        • ๐Ÿ’œSWEA
        • ๐Ÿ’œํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      • ๐Ÿ”ด Study
        • ๐Ÿ”ด๋ฉด์ ‘ ์Šคํ„ฐ๋””
        • ๐Ÿ”ด ๊ธฐ์—…๋ถ„์„
        • ๐Ÿ”ด ์—๋Ÿฌ๋…ธํŠธ(Error Note)๐Ÿงฑ
        • ๐Ÿ”ด ITNews(Coding)
        • ๐Ÿ”ด ITNews(Tech)
      • ๐ŸŸ  ์ธ์ƒ ๊ณ„ํš
        • ๐ŸŸ  ์˜ฌํ•ด ๋ชฉํ‘œ
      • ๐ŸŸก TIL
        • ๐ŸŸก TIL ์ผ๊ธฐ
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    html
    ๋™ํ–ฅ๋ถ„์„
    IT์ด์Šˆ
    ์ตœ๊ทผ์ด์Šˆ
    ์ฝ”๋“œ์Šคํ„ฐ๋””
    ๋ฌธ์ œํ’€์ด
    Ai
    ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ
    ๋ฐฑ์ค€
    SW์ด์Šˆ
    ๋ฐฉํ•™์Šคํ„ฐ๋””
    css
    ์ฝ”๋“œ๋ฆฌ๋ทฐ
    ๊ธฐ์—…๋ถ„์„
    ์‚ผ์„ฑ์ „์ž
    ๊ฐœ๋ฐœ
    ์Šคํ„ฐ๋””
    ๋„ค์นด๋ผ์ฟ ๋ฐฐ
    ์ž๋ฃŒ๊ตฌ์กฐ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋‰ด์Šค๋ฃธ
    ์ฝ”๋”ฉ
    ๊ฐœ๋ฐœ๊ณต๋ถ€
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ์Šค๋งˆํŠธ์‹ฑ์Šค
    ๋‰ด์Šค์Šคํฌ๋žฉ
    ๋ถ„์„๋ ˆํฌํŠธ
    ์ฝ”ํ…Œ
    C
    ์›น๊ฐœ๋ฐœ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
eyes from es
[LeetCode] DP : Minimum Difficulty of a Job Schedule (Java)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”