이 튜토리얼에서는 C++의 STL(표준 템플릿 라이브러리)을 사용하여 이진 배열에 포함된 1과 0의 개수를 세는 방법을 살펴보겠습니다.
이 문제에서는 하나의 배열이 주어지며, 우리의 과제는 해당 배열 안에 존재하는 0과 1이 각각 몇 개인지 계산하는 것입니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
// 요소가 1인지 검사하는 조건자 함수
bool isOne(int i){
if (i == 1)
return true;
else
return false;
}
int main(){
int a[] = { 1, 0, 0, 1, 0, 0, 1 };
int n = sizeof(a) / sizeof(a[0]);
int count_of_one = count_if(a, a + n, isOne);
cout << "1's: " << count_of_one << endl;
cout << "0's: " << (n - count_of_one) << endl;
return 0;
}실행 결과
1's: 3 0's: 4
코드 설명
위 코드의 핵심은 STL에서 제공하는 count_if() 함수입니다. 이 함수는 지정된 범위 내에서 주어진 조건을 만족하는 요소의 개수를 반환합니다.
동작 과정을 단계별로 정리하면 다음과 같습니다.
1. 조건자 함수 정의: isOne() 함수는 배열의 각 요소가 1인지 여부를 판단하는 조건자(predicate) 역할을 합니다. 요소가 1이면 true를, 그렇지 않으면 false를 반환합니다.
2. count_if()로 1의 개수 계산: 배열의 시작 주소부터 끝까지 범위를 지정하고, 앞서 정의한 조건자 함수를 인자로 전달하여 1의 개수를 구합니다.
3. 0의 개수 계산: 이진 배열이므로 전체 요소 개수(n)에서 1의 개수를 빼면 곧바로 0의 개수를 얻을 수 있습니다. 별도의 반복문 없이 간단한 산술 연산으로 처리되는 것이 이 방식의 장점입니다.
이처럼 STL의 count_if()를 활용하면 직접 반복문을 작성하지 않고도 코드를 더욱 간결하고 가독성 있게 작성할 수 있습니다.