[99클럽] 99클럽 코테 스터디 20일차 TIL - 동적계획법 (Dynamic Programming)

2024. 6. 8. 20:59·코딩테스트 연습/99클럽
728x90

 

오늘의 문제

LeetCode - Partition Array for Maximum Sum (출처 하단 표기)

비기너 문제가 쉬워서 미들러 문제도 같이 풀어보았다.

 

문제

Given an integer array arr, partition the array into (contiguous) subarrays of length at most k. After partitioning, each subarray has their values changed to become the maximum value of that subarray.

Return the largest sum of the given array after partitioning. Test cases are generated so that the answer fits in a 32-bit integer.

 

제한사항

  • 1 <= arr.length <= 500
  • 0 <= arr[i] <= 10^9
  • 1 <= k <= arr.length

입출력 예

arr k return
[1,15,7,9,2,5,10] 3 84
[1,4,1,5,7,3,6,1,9,9,3] 4 83
[1] 1 1

 

풀이

import java.util.*;

class Solution {
    public int maxSumAfterPartitioning(int[] arr, int k) {
        int n = arr.length;
        int[] dp = new int[n+1];  // dp[i] = arr[0]부터 arr[i-1]까지의 최대 합 저장
        
        for (int i=1; i<=n; i++) {
            int subMax = 0;
            for (int j=1; j<=k && i-j>=0; j++) {
                subMax = Math.max(subMax, arr[i-j]);    // i부터 j개까지의 최대 원소
                dp[i] = Math.max(dp[i], dp[i-j] + subMax * j); // i부터 j까지의 최대 합
            }
        }
        
        return dp[n];
    }
}

 

주어진 배열에서 최대 k개로 부분 배열을 만든 후 각 서브 배열을 최댓값으로 바꾼 후 그 수의 합을 구하는 문제였다. 배열을 정렬하지 않고 최대합을 찾는 문제이기 때문에 DP를 이용하는 것이 좋을 것 같다고 생각했다. 원소의 최대 합을 저장할 배열을 선언한 후, arr 배열을 순회하면서 i부터 최대 k개를 뽑아 가장 큰 값을 찾은 후 dp 배열에 최대 합을 저장하는 형식으로 작성하였다. dp 배열의 끝 값이 최대합임으로 이를 return 해주면 된다. 처음에 풀 때 k개만큼 서브 배열이 구성되지 않는 경우를 생각하지 못해 힌트를 보고 풀었다.

 

 

출처: LeetCode, https://leetcode.com/problems/partition-array-for-maximum-sum/
728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 연습 > 99클럽' 카테고리의 다른 글

[99클럽] 99클럽 코테 스터디 22일차 TIL - 이분탐색 (Binary Search)  (1) 2024.06.10
[99클럽] 99클럽 코테 스터디 21일차 TIL - 동적계획법 (Dynamic Programming)  (0) 2024.06.09
[99클럽] 99클럽 코테 스터디 19일차 TIL - 동적계획법 (Dynamic Programming)  (0) 2024.06.07
[99클럽] 99클럽 코테 스터디 18일차 TIL - 동적계획법 (Dynamic Programming)  (0) 2024.06.06
[99클럽] 99클럽 코테 스터디 17일차 TIL - 그리디 (Greedy)  (0) 2024.06.05
'코딩테스트 연습/99클럽' 카테고리의 다른 글
  • [99클럽] 99클럽 코테 스터디 22일차 TIL - 이분탐색 (Binary Search)
  • [99클럽] 99클럽 코테 스터디 21일차 TIL - 동적계획법 (Dynamic Programming)
  • [99클럽] 99클럽 코테 스터디 19일차 TIL - 동적계획법 (Dynamic Programming)
  • [99클럽] 99클럽 코테 스터디 18일차 TIL - 동적계획법 (Dynamic Programming)
hxxzz
hxxzz
개발새발 안 되게 개발 노력 중
  • hxxzz
    개발새발
    hxxzz
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • Java (3)
      • Back-End (9)
        • Spring Boot (7)
        • DevOps (1)
        • Redis (1)
      • Computer Scrience (4)
        • Data Structrue (4)
        • Algorithm (0)
      • SQLD (3)
      • 코딩테스트 연습 (85)
        • Programmers (30)
        • 백준 (15)
        • etc. (0)
        • 99클럽 (40)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SQLD
    프로그래머스
    java
    백준
    99클럽
    N+1 문제
    SQL
    Spring Boot
    redission
    BFS
    자료구조
    Stack
    SpringBoot
    jpa
    LeetCode
    til
    코딩테스트 준비
    스택
    개발자 취업
    dfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
hxxzz
[99클럽] 99클럽 코테 스터디 20일차 TIL - 동적계획법 (Dynamic Programming)
상단으로

티스토리툴바