이 글에서는 C++를 이용해 배열을 역순으로 뒤집는 방법을 소개합니다. 핵심 아이디어는 낮은 인덱스(low)와 높은 인덱스(high)를 두고, 두 위치의 요소를 서로 교환(swap)하면서 두 인덱스가 중앙에서 만날 때까지 배열을 순회하는 것입니다.
동작 원리
배열의 첫 번째 요소와 마지막 요소를 먼저 교환하고, 그다음 두 번째 요소와 뒤에서 두 번째 요소를 교환하는 방식으로 진행됩니다. low 인덱스는 앞에서 뒤로, high 인덱스는 뒤에서 앞으로 한 칸씩 이동하며, low가 high보다 작은 동안만 반복문이 실행됩니다.
예제 코드
#include <iostream>
#include <algorithm>
using namespace std;
void reverseArray(int arr[], int n){
for (int low = 0, high = n - 1; low < high; low++, high--){
swap(arr[low], arr[high]);
}
for (int i = 0; i < n; i++){
cout << arr[i] << " ";
}
}
int main(){
int arrInput[] = { 11, 12, 13, 14, 15 };
cout<<endl<<"Array::";
for (int i = 0; i < 5; i++){
cout << arrInput[i] << " ";
}
int n = sizeof(arrInput)/sizeof(arrInput[0]);
cout<<endl<<"Reversed::";
reverseArray(arrInput, n);
return 0;
}출력 결과
정수형 배열 {11, 12, 13, 14, 15}를 입력하면 다음과 같이 역순으로 뒤집힌 결과가 출력됩니다.
Array::11 12 13 14 15 Reversed::15 14 13 12 11
정리
이 방식은 배열 전체를 한 번만 순회하므로 시간 복잡도는 O(n)입니다. 또한 별도의 추가 배열을 만들지 않고 기존 배열 안에서 직접 요소를 교환하는 제자리(in-place) 방식이기 때문에 메모리 사용 측면에서도 효율적입니다.