티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/161988
접근 방법
- 몇 번째 요소에서 시작하던지, 수열을 1로 시작한 펄스와 -1로 시작한 펄스가 곱해진 두 개의 수열만 고려하면 됨
- index 값에 따라 1과 -1로 값이 교차되는 pulse 변수 사용
- 최선의 답을 구하기 위해 0 부터 n-1까지 순회를 해야하긴 하지만, 여기서 중요한 점은 어떤 index에서 어떤 선택을 해야 최선의 답이 나올 것인지이다
- DP를 사용하여 각 수열에 대해서, a) 현재 index까지의 연속된 누적합 + 현재의 sequence 값 b) 현재의 sequence 값를 비교해서 더 높은 값을 기록한다.
- dp[i] = max( _sequence[i] , _sequence[i] + dp[i-1] )
- 언제 제일 높은 값이 나올 지 모르기 때문에 매 순회마다 answer, a_max, b_max의 값을 비교해준다.
- DP를 사용하여 각 수열에 대해서, a) 현재 index까지의 연속된 누적합 + 현재의 sequence 값 b) 현재의 sequence 값를 비교해서 더 높은 값을 기록한다.
코드
def solution(sequence):
answer = -1e9
a_max = b_max = 0
pulse = 1
for i in range(len(sequence)):
a = sequence[i] * pulse
b = sequence[i] * -pulse
a_max = max(a, a + a_max)
b_max = max(b, b + b_max)
answer = max(answer, a_max, b_max)
pulse *= -1
return answer
후기
문제와 해결법이 직관적이지 않아 이해하기 어려웠던 문제 ㅠㅠ
'Algorithm' 카테고리의 다른 글
등산코스 정하기 (Python) (0) | 2023.09.19 |
---|---|
광고 삽입 (Java) (0) | 2023.09.17 |
표현 가능한 이진트리 (Java) (0) | 2023.09.14 |
[BOJ] 2623번 : 음악 프로그램 (Java) (0) | 2023.09.11 |
가장 긴 팰린드롬 (Java) (0) | 2023.09.10 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 듄 파트 2
- 이해
- 프로그래머스
- protobuf
- cicd
- DB
- spring boot
- Docker
- 누적합
- dfs
- dp
- kotlin
- 정규화
- 후기
- csv
- 리뷰
- 샤딩
- 인덱스
- 영화
- 영화 후기
- 역직렬화
- 듄
- 파티셔닝
- Everything Everywhere All at Once
- json
- 하이재킹
- 인문
- tree
- 행동분석
- 직렬화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함