https://school.programmers.co.kr/learn/courses/30/lessons/161988
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근 방법
- 최대 50만 길이의 배열이 input으로 들어온다. 즉 O(nlogn) 이하의 알고리즘이 가능하다
- 입력 배열에 각각 [1,-1,1,-1 ,1,-1...] [-1,1 -1,1, -1,1...]을 곱한 두가지 케이스에서 최대 부분수열의 max값을 찾아야한다
- 따라서 dp 배열에 0번 열에는 +값만, 1번 열에는 -값을 저장한다
- 즉, (i,0) 에는 (i-1,1) + seq[i]값이 0보다 크면 들어온다. (i,1) 에는 (i-1,0) - seq[i]값이 0보다 크면 들어온다
코드
class Solution {
public long solution(int[] sequence) {
int n = sequence.length;
long[][] dp = new long[n][2];
dp[0][0] = sequence[0];
dp[0][1] = -sequence[0];
for(int i = 1 ; i < n ; i++){
dp[i][0] = Math.max(dp[i-1][1],0) + sequence[i];
dp[i][1] = Math.max(dp[i-1][0],0) - sequence[i];
}
long ans = 0L;
for(long[] d: dp) ans = Math.max(ans, Math.max(d[0], d[1]));
return ans;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] LV 2 하노이 탑 (1) | 2024.11.16 |
---|---|
[프로그래머스] LV 3 정수 삼각형 (0) | 2024.11.11 |
[프로그래머스] LV 2 124나라의 숫자 (0) | 2024.11.09 |
[코드트리] G2 루돌프의 반란 (2) | 2024.11.08 |
[프로그래머스] LV 2 디펜스 게임 (0) | 2024.11.07 |