반응형
1. 문제
A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P ≤ Q < N, is called a slice of array A. The sum of a slice (P, Q) is the total of A[P] + A[P+1] + ... + A[Q].
Write a function:
int solution(vector<int> &A);
that, given an array A consisting of N integers, returns the maximum sum of any slice of A.
For example, given array A such that:
A[0] = 3
A[1] = 2
A[2] = -6
A[3] = 4
A[4] = 0
the function should return 5 because:
(3, 4) is a slice of A that has sum 4,
(2, 2) is a slice of A that has sum −6,
(0, 1) is a slice of A that has sum 5,
no other slice of A has sum greater than (0, 1).
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..1,000,000];
- each element of array A is an integer within the range [−1,000,000..1,000,000];
- the result will be an integer within the range [−2,147,483,648..2,147,483,647].
주어진 배열에서, 가장 큰 부분 합(P, Q)을 구하는 문제 \( (0 \leq P \leq Q < N) \)
\( (P, Q) = A[P] + A[P+1] + ... + A[Q] \)
예시) return 5
| A[0] | A[1] | A[2] | A[3] | A[4] |
| 3 | 2 | -6 | 4 | 0 |
A[3] + A[4] = 4
A[2] + A[2] = -6
A[0] + A[1] = 5
2. 매개변수 제한
- Vector A 크기: 1 ~ 1,000,000
- Vector A 요소 값: -1,000,000 ~ 1,000,000
- 부분 합: -2,147,483,648 ~ 2,147,483,647
3. 코드 (C++)
MaxProfit 문제(MaxProfit #2)와 동일한 전략으로 문제를 풀면 된다.
요소 하나하나를 더해가면서 값을 누적시키고, 음수가 되면 누적 값을 초기화 한다.
단, 매개변수가 음수를 포함하므로, 변수 초기값 설정에 신경써야 한다.
#include <limits>
int solution(vector<int> &A) {
int max = numeric_limits<int>::min();
int sum = 0;
for(size_t i = 0; i < A.size(); i++)
{
sum += A[i];
if(sum > max) max = sum;
if(sum < 0) sum = 0;
}
return max;
}반응형
'Algorithm Problem > Codility' 카테고리의 다른 글
| Lesson 9. Maximum slice problem - MaxDoubleSliceSum #2 (속도 개선) (1) | 2024.12.21 |
|---|---|
| Lesson 9. Maximum slice problem - MaxDoubleSliceSum #1 (0) | 2024.12.21 |
| Lesson 9. Maximum slice problem - MaxProfit #3 (속도 개선-2) (0) | 2024.12.15 |
| Lesson 9. Maximum slice problem - MaxProfit #2 (속도 개선-1) (0) | 2024.12.15 |
| Lesson 9. Maximum slice problem - MaxProfit #1 (0) | 2024.12.15 |