STUDY/코딩테스트 연습(PS)

프로그래머스/월간 코드 챌린지 시즌 1/두 개 뽑아서 더하기/C++

hyunah 2021. 4. 5. 07:49

문제 설명

 

중요한 점

1. result 배열을 어떻게 오름차순으로 만들 것이냐 -> numbers를 정렬한 후 더하기, result를 정렬하여 반환하기, 자동정렬이 되는 컨테이너를 사용

 

2. result 배열에서 어떻게 중복을 제거할 것이냐 -> 원소 입력시 이미 존재하는 값의 원소인지 구분, 중복을 허용하지 않는 컨테이너를 사용

 

 

 

원소 간의 중복을 허용하지 않고 자동으로 원소가 오름차순 정렬되는 set 컨테이너를 사용하여 풀면 된다는 것을 알 수 있다.

 

 

#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> numbers) {
    set<int> s;

    for(int i = 0; i<numbers.size(); i++){
        for(int j = i+1; j<numbers.size(); j++){
            s.insert(numbers[j]+numbers[i]);
        }
    }

    vector<int> answer(s.begin(), s.end());

    return answer;
}

 

 

기록

: set을 vector로 복사하기 위해서 answer 벡터를 나중에 생성하였는데 assign 함수를 사용하면 생성 이후에 원소를 복사하는 것이 가능하다. 기존 데이터를 삭제하고 원소를 할당하기 때문.