코테/프로그래머스

[프로그래머스/Level3] 연속 펄스 부분 수열의 합 (JAVA)

imname1am 2024. 3. 29. 21:33
반응형

📖 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

💡  풀이 방식

• DP

- 연속된 합이 최대가 되도록... dp

dp[n] : n번째 원소를 포함했을 때의 최댓값
⇒ dp[n] = Math.max(dp[n-1] + n, n)

 

 

 

 

💥 유의사항

- 부분 수열의 합은 절대 0보다 작을 수 없으므로, 0 이하로 값이 나오게 되면 dp를 초기화하고 다시 최댓값을 구한다!

- answer이 long 형으로 선언되어 있으므로, long형으로 계산해야 오류가 나지 않는다.

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;
 
class Solution {
    public long solution(int[] sequence) {
        long answer = 0;
        
        boolean isPlus = true;
        
        long p1 = 0;    // [1,-1,1,...] 을 순서대로 곱하는 부분 수열의 합
        long p2 = 0;    // [-1,1,-1,...]을 순서대로 곱하는 부분 수열의 합
        
        for(int num : sequence) {
            p1 += isPlus ? num : -num;
            p2 += isPlus ? -num : num;
            
            // 0보다 값이 작아진 경우, 0으로 만들기 (0보다 더 작은 값이 될 수 없으므로)
            p1 = Math.max(0, p1);
            p2 = Math.max(0, p2);
            
            // p1과 p2가 answer보다 커지면, answer 갱신하기
            answer = Math.max(answer, Math.max(p1, p2));
            
            isPlus = !isPlus;
        }  
        
        return answer;
    }
}
cs

 

 

 

 

➕ 다른 풀이 방식

- 누적합을 활용한 풀이

 

[프로그래머스] 연속 펄스 부분 수열의 합 JAVA

문제링크1로 시작하는 누적합 배열과, -1로 시작하는 누적합 배열을 구분하여 풀이를 시작하였다.해당 인덱스 전까지 경우의 수들을 비교하며 최댓값을 탐색하였는데, 줄어드는 이중반복문이라

velog.io

 

 

- 헐 이거 내가 풀려던 방식과 같다!!!! 개인적으로 이 풀이가 더 이해가 잘 되는 듯

 

[프로그래머스] 연속 펄스 부분 수열의 합 (자바)

https://school.programmers.co.kr/learn/courses/30/lessons/161988 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

chamggae.tistory.com


💦 어려웠던 점

- dp인 것은 캐치했고 이렇게 풀려고 노력했으나,,, 구현이 제대로 안 된 것 같아서 다른 분 풀이를 보고 작성했다.

- 내가 틀리게 풀었던 방식을 보니 완전 기초 dp 문제라 알아서 가장 큰 값을 저장할텐데 구간을 나누면서 확인하려고 생각했었다... 그러지 않아도 되었는데!!

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ 풀이 참고

 

[프로그래머스] 연속 펄스 부분 수열의 합 Lv3 JAVA [DP][엄탱]

문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.

tang25.tistory.com

 

반응형