최대 1 분 소요

Question

Q Q2


Solution

  • 이중 for문으로 두 수를 중복되지 않게 꺼내고 합하여 vector에 저장한다.
  • 중복되는 값들이 들어오기 때문에 erase,unique 함수를 쓰기위해 정렬한다.

Cord

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> numbers)
{
    vector<int> answer;
    for (int i = 0; i < numbers.size() - 1; i++)
    {
        for (int j = i + 1; j < numbers.size(); j++)
        {
            int a = numbers[i];
            int b = numbers[j];
            int sum = a + b;
            answer.push_back(sum);
        }
    }

    sort(answer.begin(), answer.end());
    answer.erase(unique(answer.begin(), answer.end()), answer.end());
    return answer;
}

정말 괜찮은 다른 풀이 두가지도 가져와 봤다.

첫 번째 - 굉장히 깔끔한 코드

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    set<int> st;
    for(int i = 0;i<numbers.size();++i){
        for(int j = i+1 ; j< numbers.size();++j){
            st.insert(numbers[i] + numbers[j]);
        }
    }
    answer.assign(st.begin(), st.end());
    return answer;
}

두 번째 - 풀이의 정석

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    vector<bool> visited(201,false);
    for(int i=0;i<numbers.size();i++) {
        for(int j=i+1;j<numbers.size();j++)
            if(visited[numbers[i]+numbers[j]] == false) {
                answer.push_back(numbers[i]+numbers[j]);
                visited[numbers[i]+numbers[j]] = true;
            }
    }

    sort(answer.begin(),answer.end());
    return answer;
}

Result

Result