카테고리 없음

[SW Expert Academy]Professional-3819:최대 부분 배열

수연초이 2021. 4. 13. 22:25

배열의 연속합 중 최대를 구하는 문제이다. Dynamic Programming 방식으로 접근해서 풀었다.

 

DP배열을 생성하여 i를 끝으로 하는 부분 합 중 최댓값을 저장하도록 하였다.

즉, DP[i]는 i번째 원소를 포함하는 최대 연속 부분합이다.

따라서 dp 배열의 최댓값을 결과로 리턴하면 된다!

 

참고로

dp[i] = Math.max(dp[i - 1] + arr[i], arr[i]);

이렇게 식을 만들었는데 음수값이 아닌 경우만 확인해줘도 되므로

dp[i] = Math.max(dp[i - 1], 0) + arr[i];

이렇게도 가능하다.

 

그나저나 이 문제는 BufferedReader를 사용하면 안되고 Scanner를 사용해야만 메모리 초과가 나지 않는다.

(데이터에 공백이 잘못 설정되었다는 소문이 있습니다...)

 

github.com/SuyeonChoi/Algorithms/blob/master/SW%20Expert%20Academy/Java/DP/p3819.java

 

SuyeonChoi/Algorithms

Personal Algorithm Study::solving BOJ, Programmers, and SW Expert Academy - SuyeonChoi/Algorithms

github.com