Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- winapi
- const
- Programmers
- UnrealEngine4
- algorithm
- IFileDialog
- UnrealEngine5
- Unreal Engine5
- C
- 팰린드롬 만들기
- 티스토리챌린지
- baekjoon
- directx
- 언리얼엔진5
- NRVO
- DirectX11
- 오블완
- C++
- 백준
- GeeksForGeeks
- DeferredRendering
- 1563
- softeer
- RVO
- RootMotion
- 줄 세우기
- Frustum
- UE5
- 2294
- 프로그래머스
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 연속 펄스 부분 수열의 합 본문
https://school.programmers.co.kr/learn/courses/30/lessons/161988
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
long long solution(vector<int> sequence)
{
long long answer = 0;
long long sum1 = 0;
long long sum2 = 0;
bool isCheck = true;
for (int i = 0; i < sequence.size(); ++i)
{
sum1 += (long long)sequence[i] * (isCheck ? 1 : -1);
sum2 += (long long)sequence[i] * (isCheck ? -1 : 1);
sum1 = max(sum1, (long long)0);
sum2 = max(sum2, (long long)0);
answer = max(answer, max(sum1, sum2));
isCheck = !isCheck;
}
return answer;
}
|
cs |
투포인터 기본문제들 중 하나인 최대 부분수열의 합을 구하는 문제처럼 풀이해도 되는데, 결과값의 시작인덱스와 끝인덱스를 알필요까진 없으니 위와같은 풀이가 가능하다.
정말 간단하게, 그냥 인덱스가 늘어나다가 음수값이 되면 다시 0으로 초기화시켜버리면 된다. 이런게 가능한 이유는 이 문제에서 최솟값은 0이기 때문이다. 음수가 절대 될 수 없다.
수열이 음수만 주어진다 하더라도 그냥 아무 음수하나 고른다음에 -1을 곱해버리면 그만이기 때문이다.
그렇기 때문에 max의 비교값에 0을 넣을 수 있는 것이다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 도넛과 막대그래프 (1) | 2024.01.11 |
---|---|
[Algorithm] Programmers :: 상담원 인원 (0) | 2023.09.04 |
[Algorithm] Programmers :: 억억단을 외우자 (0) | 2023.09.03 |
[Algorithm] Programmers :: 숫자 타자 대회 (0) | 2023.09.02 |
[Algorithm] Programmers :: 등대 (0) | 2023.08.31 |