본문 바로가기

Algorithm/Programers - C++

[프로그래머스]내적 & 없는숫자 더하기 / 범용 수치 알고리즘

풀이

-없는 숫자 더하기

#include <string>
#include <vector>
#include <algorithm> // find

using namespace std;

int solution(vector<int> numbers) {
    int answer = 0;
    vector<int> allnum = {1,2,3,4,5,6,7,8,9};
    
    for(int i=0; i<allnum.size(); i++){
        if(find(numbers.begin(), numbers.end(),allnum[i]) == numbers.end())
            answer += allnum[i];
    }
    
    return answer;
}

 

 

-내적

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

 

 

 


 

 

 

다른사람 풀이

-없는 숫자 더하기

#include <bits/stdc++.h>
using namespace std;

int solution(vector<int> numbers) {
    return 45 - accumulate(numbers.begin(), numbers.end(), 0);
}

-내적

#include <vector>
#include <numeric>
using namespace std;

int solution(vector<int> a, vector<int> b) {    
    return inner_product(a.begin(),a.end(),b.begin(),0);
}

이렇게 유용한 함수가 있었다니...!

내 3~4줄인 내 코드를 한 줄로 줄일 수 있었고, 변수도 따로 만들지 않아도 되었다. 

유용하게 사용할 수 있을듯 하니 꼭 기억해둘 것!

 

사용하기 위해선 <numeric> 헤더 파일을 추가해야 한다.

-accumulate : vecter에 있는 값만을 더한다.

-innuer_product : 두 입력 시퀀스의 내적을 계산하는 알고리즘으로 기본적으로는 +와 *을 사용한다. 두 입력 시퀀스의 값은 위치의 값을 서로 곱한 값을 모두 더한 것이 최종 계산 값이 된다. 주의해야 할 것은 두 입력 시퀀스의 구간 중 두 번째 시퀀스는 첫 번째 시퀀스 구간보다 크거나 같아야 한다. 

 

 

 


https://gamdekong.tistory.com/80

 

10. 범용 수치 알고리즘(accumulate, inner_product)

accumulate 지정한 구간에 속한 값들을 모든 더한 값을 계산한다. 기본적으로 더하기 연산만 하지만 조건자를 사요하면 더하기 이외의 연산도 할 수 있다. accumulate를 사용하기 위해서는 앞서 소개

gamdekong.tistory.com