728x90
반응형

풀이 방법

우선 가장 처음으로 든 생각은 각 숫자의 합을 배열에 넣어서 정렬하고 중복을 제거하면 되겠다 !

정말 단순하게 생각한 방법이었다.

물론 쉽게 답을 맞출 수 있었는데 다른 사람의 풀이를 보다가 set 을 이용한 방법으로 푼 사람을 보게 되었다.
전혀 생각지도 못한 방법이었기 때문에 워후... 이런 방법도 있구나 생각했다.

set 의 특징 중 하나가 key 값을 중복 값을 허용하지 않는다는 점이다.
그리고 insert() 함수를 사용하게 되면 값을 입력할 때 자동으로 정렬되어 값이 들어가게 된다.

set 을 사용하면 정렬과 중복 제거가 동시에 이루어지기 때문에 정말 이 문제를 위한 컨테이너다.👍

 

소스 코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

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++) {
            answer.push_back(numbers[i] + numbers[j]);
        }
    }
    
    sort(answer.begin(), answer.end());
    answer.erase(unique(answer.begin(), answer.end()), answer.end());
    
    
    for(int i=0; i<answer.size(); i++) {
        cout << answer[i] << " ";
    }
    
    return answer;
}

 

set 을 이용한 소스 코드

#include <string>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    set<int> tmp;
    
    for(int i=0; i<numbers.size(); i++) {
        for(int j=i+1; j<numbers.size(); j++) {
						// insert 를 통해 입력하면 자동으로 정렬된다.
            tmp.insert(numbers[i] + numbers[j]);
        }
    }
    
		// answer 배열에 할당해준다.
    answer.assign(tmp.begin(), tmp.end());    
    
    return answer;
}
728x90
반응형
복사했습니다!