배열(array)은 같은 데이터 타입의 여러 요소를 하나의 컨테이너에 저장하는 자료구조입니다. 배열의 인덱스는 0부터 시작하며, 즉 첫 번째 요소의 인덱스는 0입니다.
이 문제에서는 배열에서 짝수 인덱스에 위치한 숫자들과 홀수 인덱스에 위치한 숫자들을 각각 묶어 두 그룹의 절대 차이를 구해야 합니다.
- 짝수 인덱스: 0, 2, 4, 6, 8 …
- 홀수 인덱스: 1, 3, 5, 7, 9 …
여기서 절대 차이(absolute difference)란 두 값의 차이에 절댓값을 취한 것으로, 항상 양수가 됩니다.
예를 들어 15와 7의 절대 차이는 |15 − 7| = 8입니다.
문제 예시
입력: arr = {1, 2, 4, 5, 8}
출력:
짝수 인덱스 요소의 절대 차이 = 5
홀수 인덱스 요소의 절대 차이 = 3풀이 과정
짝수 인덱스 요소 계산
짝수 인덱스(0, 2, 4)에 있는 요소는 1, 4, 8입니다. 앞 값부터 차례로 차이를 누적해 계산합니다.
- |0 − 1| = 1
- |1 − 4| = 3
- |3 − 8| = 5
홀수 인덱스 요소 계산
홀수 인덱스(1, 3)에 있는 요소는 2, 5입니다.
- |0 − 2| = 2
- |2 − 5| = 3
C++ 구현 예제
다음 코드는 배열을 한 번만 순회하면서 현재 인덱스가 짝수인지 홀수인지 판별하고, 각 그룹의 절대 차이를 누적하는 방식으로 동작합니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = { 1, 5, 8, 10, 15, 26 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << "배열의 요소 :\n";
for (int i = 0; i < n; i++) {
cout << " " << arr[i];
}
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]); // 홀수 인덱스 요소 처리
}
cout << "\n짝수 인덱스 절대 차이 : " << even;
cout << "\n홀수 인덱스 절대 차이 : " << odd;
return 0;
}실행 결과
배열의 요소 : 1 5 8 10 15 26 짝수 인덱스 절대 차이 : 8 홀수 인덱스 절대 차이 : 21
코드 동작 원리
예제 배열 {1, 5, 8, 10, 15, 26}의 실행 과정을 단계별로 살펴보겠습니다.
짝수 인덱스 (요소: 1, 8, 15)
- |0 − 1| = 1
- |1 − 8| = 7
- |7 − 15| = 8
홀수 인덱스 (요소: 5, 10, 26)
- |0 − 5| = 5
- |5 − 10| = 5
- |5 − 26| = 21
따라서 최종 출력은 짝수 인덱스 절대 차이 8, 홀수 인덱스 절대 차이 21이 됩니다.
복잡도 분석
시간 복잡도: O(n) — 배열 전체를 한 번만 순회하면 충분합니다.
공간 복잡도: O(1) — 추가로 필요한 변수는 even, odd 두 개뿐입니다.
이처럼 abs() 함수와 나머지 연산자(%)만 활용하면, 배열의 짝수·홀수 인덱스 요소 간 절대 차이를 매우 간단하고 효율적으로 구할 수 있습니다.