반응형
1. 문제
Let A be a non-empty array consisting of N integers.
The abs sum of two for a pair of indices (P, Q) is the absolute value |A[P] + A[Q]|, for 0 ≤ P ≤ Q < N.
For example, the following array A:
A[0] = 1
A[1] = 4
A[2] = -3
has pairs of indices (0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2).
The abs sum of two for the pair (0, 0) is A[0] + A[0] = |1 + 1| = 2.
The abs sum of two for the pair (0, 1) is A[0] + A[1] = |1 + 4| = 5.
The abs sum of two for the pair (0, 2) is A[0] + A[2] = |1 + (−3)| = 2.
The abs sum of two for the pair (1, 1) is A[1] + A[1] = |4 + 4| = 8.
The abs sum of two for the pair (1, 2) is A[1] + A[2] = |4 + (−3)| = 1.
The abs sum of two for the pair (2, 2) is A[2] + A[2] = |(−3) + (−3)| = 6.
Write a function:
int solution(vector<int> &A);
that, given a non-empty array A consisting of N integers, returns the minimal abs sum of two for any pair of indices in this array.
For example, given the following array A:
A[0] = 1
A[1] = 4
A[2] = -3
the function should return 1, as explained above.
Given array A:
A[0] = -8
A[1] = 4
A[2] = 5
A[3] = -10
A[4] = 3
the function should return |(−8) + 5| = 3.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,000];
- each element of array A is an integer within the range [−1,000,000,000..1,000,000,000].
두 수를 더했을 때, 가장 작은 절대값을 구하는 문제.
예시1) return 1
| A[0] | A[1] | A[2] |
| 1 | 4 | -3 |
A[0] + A[0] = |1 + 1| = 2
A[0] + A[1] = |1 + 4| = 5
A[0] + A[2] = |1 + (−3)| = 2
A[1] + A[1] = |4 + 4| = 8
A[1] + A[2] = |4 + (−3)| = 1
A[2] + A[2] = |(−3) + (−3)| = 6
예시2) return 3
| A[0] | A[1] | A[2] | A[3] | A[4] |
| -8 | 4 | 5 | -10 | 3 |
A[0] + A[0] = |(−8) + (−8)| = 16
A[0] + A[1] = |(−8) + 4| = 4
A[0] + A[2] = |(−8) + 5| = 3
A[0] + A[3] = |(−8) + (−10)| = 18
A[1] + A[1] = |4 + 4| = 8
A[1] + A[2] = |4 + 5| = 9
A[1] + A[3] = |4 + (−10)| = 6
A[1] + A[4] = |4 + 3| = 7
A[2] + A[2] = |5 + 5| = 10
A[2] + A[3] = |5 + (−10)| = 5
A[2] + A[4] = |5 + 3| = 8
A[3] + A[3] = |(−10) + (−10)| = 20
A[3] + A[4] = |(−10) + 3| = 7
A[4] + A[4] = |3 + 3| = 6
2. 매개변수 조건
- Vector A 크기: 1 ~ 100,000
- Vector A 요소 값: -1,000,000,000 ~ 1,000,000,000
3. 코드 (C++)
전체탐색
int solution(vector<int> &A) {
int min = numeric_limits<int>::max();
for(size_t i = 0; i < A.size(); i++)
{
for(size_t j = i; j < A.size(); j++)
{
int sum = A[i] + A[j];
if(sum < 0) sum *= -1;
if(sum < min) min = sum;
}
}
return min;
}
4. 결과

반응형
'Algorithm Problem > Codility' 카테고리의 다른 글
| Lesson 15. Caterpillar method - MinAbsSumOfTwo #3 (속도 개선-2) (0) | 2025.03.22 |
|---|---|
| Lesson 15. Caterpillar method - MinAbsSumOfTwo #2 (속도 개선-1) (0) | 2025.03.22 |
| Lesson 15. Caterpillar method - CountTriangles (0) | 2025.03.09 |
| Lesson 15. Caterpillar method - CountDistinctSlices #2 (속도 개선) (0) | 2025.03.08 |
| Lesson 15. Caterpillar method - CountDistinctSlices #1 (0) | 2025.03.08 |