프로그래머스 - 두 개 뽑아서 더하기
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