이 튜토리얼에서는 C++를 사용해 배열에 포함된 짝수 요소와 홀수 요소의 개수를 구하는 프로그램을 다룹니다.
정수형 배열이 하나 주어졌을 때, 우리가 해야 할 작업은 해당 배열을 순회하면서 짝수와 홀수가 각각 몇 개인지 계산하는 것입니다. 이 문제는 나머지 연산자(%)만 활용하면 아주 간단하게 해결할 수 있습니다.
접근 방법
핵심 로직은 다음과 같습니다.
- 배열의 처음부터 끝까지 요소를 하나씩 순회합니다.
- 각 요소를 2로 나눈 나머지가 0이 아니면 홀수, 0이면 짝수로 판별합니다.
- 판별 결과에 따라 홀수 카운트 또는 짝수 카운트를 증가시킵니다.
예제 코드
#include<iostream>
using namespace std;
void CountingEvenOdd(int arr[], int arr_size) {
int even_count = 0;
int odd_count = 0;
// 배열의 모든 요소를 순회하며 검사
for (int i = 0; i < arr_size; i++) {
// 2로 나눈 나머지가 0이 아니면 홀수
if (arr[i] % 2 != 0)
odd_count++;
else
even_count++;
}
cout << "짝수 요소의 개수 = " << even_count
<< "\n홀수 요소의 개수 = " << odd_count;
}
int main() {
int arr[] = {2, 3, 4, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
CountingEvenOdd(arr, n);
return 0;
}실행 결과
짝수 요소의 개수 = 3 홀수 요소의 개수 = 2
코드 설명
위 예제에서 배열 {2, 3, 4, 5, 6}에는 짝수가 3개(2, 4, 6), 홀수가 2개(3, 5) 포함되어 있으므로 위와 같은 결과가 출력됩니다.
sizeof(arr) / sizeof(arr[0])는 배열 전체 크기를 요소 하나의 크기로 나누어 배열의 길이를 구하는 일반적인 방법입니다. 이렇게 구한 길이를 함수에 전달하면 반복문의 범위를 정확하게 지정할 수 있습니다.
이 알고리즘은 배열을 한 번만 순회하므로 시간 복잡도는 O(n), 추가로 사용하는 메모리는 상수 공간이므로 공간 복잡도는 O(1)입니다. 따라서 배열의 크기가 커져도 효율적으로 동작합니다.