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 |
Tags
- 언리얼엔진5
- baekjoon
- 티스토리챌린지
- 오블완
- NRVO
- RVO
- softeer
- GeeksForGeeks
- const
- Programmers
- 팰린드롬 만들기
- winapi
- UE5
- Unreal Engine5
- C
- 프로그래머스
- 줄 세우기
- 백준
- 2294
- IFileDialog
- RootMotion
- TObjectPtr
- 1563
- C++
- UnrealEngine4
- DirectX11
- algorithm
- UnrealEngine5
- Frustum
- directx
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 연속 펄스 부분 수열의 합 본문
https://school.programmers.co.kr/learn/courses/30/lessons/161988
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
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 |