Algorithm/C++ - 프로그래머스

프로그래머스 - 두 개 뽑아서 더하기 C++

ㅇㅇ잉 2021. 2. 8. 01:44

이중 for문 돌리면서 하나씩 계산해주고, answer에 push_back해주었다.

그리고 마지막에 정렬 후,

vector에서 중복되는 값을 뒤로 보낸 후 중복된 값의 첫번째 위치를 반환하는 unique함수를 사용하였다.

그리고 erase로 지우면 해결.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    
    for(int i=0;i<numbers.size();i++){
        for(int j=i+1;j<numbers.size();j++){
            int tmp = numbers[i]+numbers[j];
            answer.push_back(tmp);
        }
    }
    sort(answer.begin(),answer.end());
    answer.erase(unique(answer.begin(),answer.end()),answer.end());
    
    return answer;
}
cs

 

답이 맞았지만, 더 간단하게 풀 수 있었다.

set은 중복을 허용 안하니까 자연스럽게 중복 추가가 안된다.

그리고 assign() (// vector에 새로운 내용 넣기) 함수를 사용하면 간단히 해결 끝

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
#include <algorithm>
#include <set>
 
using namespace std;
 
vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    
    set<int> sum;
    
    for(int i=0;i<numbers.size();i++){
        for(int j=i+1;j<numbers.size();j++){
            sum.insert(numbers[i]+numbers[j]);
        }
    }
    
    answer.assign(sum.begin(),sum.end());
    
    return answer;
}
cs