공부/Code Cata
std::inner_product(내적 계산)
동그래님
2024. 12. 22. 13:14
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> a, vector<int> b) {
int answer = 0;
for(int i = 0; i < a.size(); ++i)
{
answer += a[i] * b[i];
}
return answer;
}
처음에는 반복문을 통해 직접 배열의 시작과 끝을 순회하며 a[i] * b[i] 의 값을 answer 변수에 더 해가며 저장했는데,
내적 계산에 대해 알아보니 C++ 표준 라이브러리 <numeric> 헤더에 std::inner_product 함수의 존재를 알게되었다.
이는 두 컨테이너의 내적을 계산할 때 사용되고, 내적(inner product)은 두 벡터의 대응 요소를 곱하고 그 결과를 모두 합산한 값을 의미한다. 고로 위 문제의 해결에 대한 기능을 갖추고 있음을 알 수 있다.
#include <string>
#include <vector>
#include <numeric>
using namespace std;
int solution(vector<int> a, vector<int> b) {
int answer = inner_product(a.begin(), a.end(), b.begin(), 0);
return answer;
}
T inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init);
first1과 last1은 a배열의 시작과 끝을 의미하고, first2는 b배열의 시작을 의미한다.
마지막으로 init은 결과 값의 초기 값을 의미한다.
- 시간 복잡도: O(n)
- 두 범위를 한 번 순회하면서 내적을 계산하므로 선형 시간 복잡도를 가집니다.
- 가독성 향상:
- 루프를 명시적으로 작성하지 않아도 되므로 코드가 간결해집니다.
- 범용성:
- 커스텀 연산자를 통해 다양한 계산을 지원합니다.
T inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2
*binary_op2 ; binary_op1 : 두 값을 결합할 커스텀 이진 연산. 기본적으로 덧셈이다.
*binary_op2 : 두 범위의 요소를 결합할 커스텀 이진 연산. 기본적으로 곱셈이다.