프로그래머스 - 두 개 뽑아서 더하기
Updated:
C++
프로그래머스 - 두 개 뽑아서 더하기
문제
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
접근 방법
numbers의 값 2개를 더하여 vector에 일단 다 저장한다.
이후 중복을 제거
구현
vector<int> answer의 중복을 제거하기 위해 vector.unique() 메소드를 사용하였다.
이를 사용하기 위해
sort()를 이용하여 오름차순으로 정렬한다.unique(vector.begin() , vector.end())를 사용한다. 이는 주어진 vector 내부의 값들의 중복 된 값들을 뒤 쪽으로 몰아 넣는다. 즉 재정렬을 한다고 생각하면 된다. 이후 unique의 return 값은 이 중복되는 값들을 몰아 놓은 시작 인덱스이다.unique의 리턴값으로 받은 시작 인덱스 부터answer.end()까지vector.erase()메소드를 사용하여 제거한다.- 위 과정을 거치면, 중복이 없는 결과 값이 나온다.
 
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> numbers) {
	vector<int> answer;
	for (int i = 0; i < numbers.size(); i++) {					//numbers에서 첫 번째 수를 가져온다.
		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;
}
후기 및 개선할 점
15분
unique() 메소드 기억!
sort -> unique -> erase