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

C++ STL count_if() 함수로 배열에서 N으로 나누어떨어지는 요소 찾기

배열이 주어졌을 때, C++ 표준 템플릿 라이브러리(STL)를 활용하여 N으로 나누어떨어지는 요소의 개수를 구하는 방법을 알아보겠습니다.

이 문제는 C++ STL에서 제공하는 count_if() 함수를 사용하면 간단하게 해결할 수 있습니다.

count_if() 함수란?

count_if()는 지정된 조건을 만족하는 요소의 개수를 반환하는 STL 알고리즘입니다. 총 세 가지 매개변수를 받습니다.

구문

count_if(LowerBound, UpperBound, function)

매개변수 설명

  • Lower Bound(시작 위치) — 배열 또는 다른 시퀀스의 첫 번째 요소를 가리킵니다.
  • Upper Bound(끝 위치) — 배열 또는 다른 시퀀스의 마지막 요소를 가리킵니다.
  • Function(조건 함수) — 지정된 조건을 기준으로 불리언(Boolean) 값을 반환합니다.

예제 입출력

입력: array[] = {2, 4, 1, 5, 8, 9}
N = 4
출력: 4로 나누어떨어지는 요소의 개수: 2

입력: array[] = {1, 2, 3, 4, 5, 10}
N = 2
출력: 2로 나누어떨어지는 요소의 개수: 3

프로그램의 접근 방법

  • 정수형 배열에 정수 값을 입력받습니다.
  • 배열의 각 요소가 사용자가 입력한 값 N으로 나누어떨어지는지 검사하는 bool 타입의 조건 함수를 작성합니다.
  • 배열의 첫 번째 요소, 마지막 요소, 그리고 조건 함수를 매개변수로 전달하여 count_if() 함수를 호출합니다.

C++ 코드 예제

#include <bits/stdc++.h>
using namespace std;
int n;
// 요소가 n으로 나누어떨어지는지 확인하는 함수
bool check(int i) {
    if (i % n == 0)
        return true;
    else
        return false;
}
int main() {
    int arr[] = {2, 4, 1, 5, 8, 9};
    n = 4;
    int size = sizeof(arr) / sizeof(arr[0]);
    int temp = count_if(arr, arr + size, check);
    cout<<"Elements divisible by "<<n<< ": " <<temp;
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Elements divisible by 4: 2

참고: 람다식으로 더 간결하게

C++11 이상에서는 별도의 조건 함수를 정의하지 않고 람다식(lambda expression)을 사용하여 코드를 더욱 간결하게 작성할 수 있습니다.

int temp = count_if(arr, arr + size, [](int i) {
    return i % n == 0;
});

예제 코드에서 변수 n이 전역 변수로 선언되어 있기 때문에 람다식이 외부 변수를 캡처하지 않고도 바로 사용할 수 있습니다. 이처럼 count_if()를 활용하면 반복문 없이도 조건을 만족하는 요소의 개수를 한 줄로 손쉽게 계산할 수 있습니다.