Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 배열에서 짝수 인덱스와 홀수 인덱스 요소의 절대 차이 구하는 방법

배열(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() 함수와 나머지 연산자(%)만 활용하면, 배열의 짝수·홀수 인덱스 요소 간 절대 차이를 매우 간단하고 효율적으로 구할 수 있습니다.