Algorithm/프로그래머스

[프로그래머스]Level.1 월간코드챌린지 시즌 1-두 개 뽑아서 더하기

youngine 2021. 1. 7. 15:46
 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

 

문제설명
제한사항
입출력예

 

가끔 문제를 풀다보면 벡터의 중복된 원소를 제거해야 하는 일이 생긴다.

그럴 떄는 unique키를 사용해서 벡터의 중복된 원소를 찾아 erase해주면 되는데..어떻게 하는지 알아보자

 

첫번쨰로 중복된 원소를 제거할 벡터를 정렬해야한다. :sort

두번째로 unique키를 사용해서 중복된원소를 젤 뒤의 쓰레기 값으로 보내고 쓰레기 값이 시작하는 인덱스를 받아온다.

세번째로 erase를 이용해서 벡터의 중복된 원소를 제거한다.

 

sort->uniuqe-> erase 순이다.

 

sort(v.begin(),v.end());

v.erase(unique(v.begin(),v.end()),v.end()); --중복된값은 쓰레기 값으로 처리 젤 뒤로 보내지므로 뒤로 간 쓰레기 값이 시작하는 처음 인덱스를 unique 키가 가지고 있는다. 그 unique가 가리키는 인덱스부터 벡터의 끝까지  중복된 값을 erase해준다.

 

 

#include <string>
#include <vector>
#include<set>
#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++){
        answer.push_back(numbers[i]+numbers[j]);
        }
    }
    sort(answer.begin(),answer.end());
    answer.erase(unique(answer.begin(),answer.end()),answer.end());
    return answer;
}