프로그래머스 - 두 개 뽑아서 더하기

Updated:

C++

프로그래머스 - 두 개 뽑아서 더하기

문제

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

문제 출처

접근 방법

numbers의 값 2개를 더하여 vector에 일단 다 저장한다. 이후 중복을 제거

구현

vector<int> answer의 중복을 제거하기 위해 vector.unique() 메소드를 사용하였다. 이를 사용하기 위해

  1. sort()를 이용하여 오름차순으로 정렬한다.
  2. unique(vector.begin() , vector.end())를 사용한다. 이는 주어진 vector 내부의 값들의 중복 된 값들을 뒤 쪽으로 몰아 넣는다. 즉 재정렬을 한다고 생각하면 된다. 이후 unique의 return 값은 이 중복되는 값들을 몰아 놓은 시작 인덱스이다.
  3. unique의 리턴값으로 받은 시작 인덱스 부터 answer.end()까지 vector.erase() 메소드를 사용하여 제거한다.
  4. 위 과정을 거치면, 중복이 없는 결과 값이 나온다.

코드

#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