개발공부/Programmers

[프로그래머스/C++] Level 1_내적

예슬예 2022. 1. 28. 20:42

<월간 코드 챌린지 시즌1 문제>

-더보기에 문제 있어요-

더보기

<문제 설명>

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

제한사항

a, b의 길이는 1 이상 1,000 이하입니다.

a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

입출력 예

a
b
result
[1,2,3,4]
[-3,-1,0,2]
3
[-1,0,1]
[1,0,-1]
-2

입출력 예 설명

입출력 예 #1

a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.

입출력 예 #2

a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.


<문제 풀이>

#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;
}

<문제 후기>

다른 사람들의 코드를 보면서 C++에는 내적을 구해주는 내장함수가 있다는 걸 알게됐다.

T inner_product(InIt1 first1, InIt1 last1, InIt2 first2, T val [, BinOp op1, BinOp op2]);

위와 같이 inner_product라는 함수이다. <numeric>이라는 헤더파일에 내장되어 있는 함수다.

나의 코드에서 이 함수를 사용하고자 한다면,

return inner_product(a.begin(),a.end(),b.begin(),0);

이렇게 사용하면 바로 원하는 값을 return 해준다. 하지만 inner_product 함수를 사용할 때 주의할 점은, 첫번째 시퀀스의 범위보다 두번째 시퀀스의 범위는 항상 같거나 커야한다. 즉, 두번째 시퀀스의 범위가 더 작다면 이 함수는 실행될 수 없다.