이 글에서는 배열에 포함된 짝수 인덱스 요소와 홀수 인덱스 요소의 절대 차이를 구하는 방법을 알아봅니다. 여기서 절대 차이란 두 값의 차가 음수로 나올 경우 절댓값을 취한다는 의미입니다.
예를 들어 배열이 {1, 2, 3, 4, 5, 6, 7, 8, 9}라고 할 때, 인덱스는 0부터 시작하므로 짝수 인덱스(0, 2, 4, 6, 8)에 있는 요소는 1, 3, 5, 7, 9이고, 홀수 인덱스(1, 3, 5, 7)에 있는 요소는 2, 4, 6, 8입니다.
짝수 인덱스 요소의 차이는 이전 계산 결과와 다음 요소를 비교하는 방식으로 누적됩니다.
- |0 − 1| = 1 (초기값 0에서 시작)
- |1 − 3| = 2
- |2 − 5| = 3
- |3 − 7| = 4
- |4 − 9| = 5
따라서 짝수 인덱스 요소의 최종 절대 차이는 5입니다. 같은 방식으로 홀수 인덱스 요소를 계산하면 |0 − 2| = 2, |2 − 4| = 2, |2 − 6| = 4, |4 − 8| = 4 순으로 진행되어 최종 결과는 4가 됩니다.
알고리즘
oddEvenDiff(arr, n)
시작
even := 0
odd := 0
i := 0부터 n-1까지 반복:
만약 i가 짝수라면
even := |even − arr[i]|
아니면
odd := |odd − arr[i]|
반복 종료
return (odd, even)
끝예제 코드
#include<iostream>
#include<cmath>
using namespace std;
void oddEvenDiff(int arr[], int n, int &o, int &e) {
int even = 0;
int odd = 0;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
even = abs(even - arr[i]); // 짝수 인덱스 요소의 차이 계산
} else {
odd = abs(odd - arr[i]); // 홀수 인덱스 요소의 차이 계산
}
}
e = even;
o = odd;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int odd, even;
oddEvenDiff(arr, n, odd, even);
cout << "홀수 인덱스 차이와 짝수 인덱스 차이는 각각: " << odd << " 와 " << even;
return 0;
}출력 결과
홀수 인덱스 차이와 짝수 인덱스 차이는 각각: 4 와 5
핵심 정리
- 인덱스가 짝수인지 홀수인지는 i % 2 연산으로 간단히 판별할 수 있습니다.
- abs() 함수를 사용해 차이가 음수가 되지 않도록 항상 절댓값을 취합니다.
- 배열을 한 번만 순회하므로 시간 복잡도는 O(n), 추가 메모리 사용량은 O(1)로 매우 효율적입니다.