반응형
오랜만에 코딩 테스트 준비를 하면서 새로운 것들을 발견하게 되어 포스팅하게 됩니다.

오랜만에 코딩 테스트 볼 일이 생겨서 프로그래머스에서 코딩 문제를 푸는데,
요즘엔 C++ 20까지 나온 상태다 보니, 굉장히 다양한 것들이 많이 생겼습니다.
그래서 막상 풀고 나서 분명 이거를 간단하게 사용하는 것이 이미 만들어져 있을 거야!라는 믿음으로 찾다 보니 발견하게 되었어요..
std::reduce <numeric>
- std::reduce는 C++17에서 도입된 함수로, 컨테이너(예: std::vector)의 요소를 하나의 값으로 줄이는 데 사용
- std::accumulate와 비슷하지만 병렬 처리를 지원할 수 있다는 점이 특징
- 형식
T std::reduce(InputIt first, InputIt last, T init, BinaryOperation op);
- 매개변수
- first, last: 컨테이너의 시작과 끝을 가리키는 반복자
- init: 초기값
- op: 바이너리 연산 (두 요소를 줄이는 방법, 예: 더하기, 곱하기 등)
- 병렬 처리
- C++17 에서는 std::execution을 사용해 병렬 처리로 최적화할 수도 있습니다.
std::vector<int> numbers = { 1, 2, 3, 4, 5 };
int sum = std::reduce(execution::par,numbers.begin(), numbers.end(), 0);
cout << "합계: " << sum << endl; // 출력: 10
return 0;
- std::reduce vs std::accumulate
특성 std::reduce std::accumulate 병렬 처리 지원 가능 (std::execution) 불가능 사용 가능 버전 C++17 이상 C++11 이상 연산 순서 병렬 처리 시 순서가 보장되지 않음 연산 순서가 항상 왼쪽에서 오른쪽으로 진행 성능 병렬 처리로 더 빠른 결과 가능 단일 스레드로 동작
std::lcm <numeric>
- C++17에서 도입된 함수로, 두 수의 최소공배수(LCM)를 계산
#include <numeric>
#include <iostream>
using namespace std;
int main() {
int a = 12, b = 18;
// 최소공배수 계산
int result = std::lcm(a, b);
cout << "최소공배수: " << result << endl; // 출력: 36
return 0;
}
사실 간단한 함수 이기 때문에 이 부분에 대해 자세한 설명은 필요 없지만, 과연 어디서 활용될 수 있는가가 제일 중요한 거 아닐까요!!
이 2개의 함수를 이용해서 최소 공배수 문제들을 풀 수 있습니다 !!
int solution(vector<int> arr) {
int answer = 0;
answer = reduce(arr.begin(), arr.end(), arr[0], lcm<int, int>);
return answer;
}
이 부분을 해석하면 arr 배열의 모든 원소를 처리하며 lcm을 적용하여 사용가능합니다.
즉, 최소 공배수 문제들을 이렇게 한 줄로 해결할 수 있다는 부분입니다.

C++ 최신 것들을 확인하다보니, 편한 함수들이 많이 생겨나고 있습니다. 너무나 좋은것..
반응형
'C, C++' 카테고리의 다른 글
[C/C++] enable_shared_from_this (0) | 2025.02.13 |
---|---|
[C/C++] 값 복사 방식 vs 참조 방식(feat.매개변수로 const 와 &를 사용하는 이유) (0) | 2025.02.08 |
[C++] istringstream, ostringstream, stringstream (0) | 2023.04.25 |
[C#] delegate (대리자) (0) | 2022.10.11 |
[C#] ThreadPool 클래스 (0) | 2022.07.04 |