[Programmers] Level1 : 두 개 뽑아서 더하기
Question
Solution
- 이중 for문으로 두 수를 중복되지 않게 꺼내고 합하여 vector에 저장한다.
- 중복되는 값들이 들어오기 때문에 erase,unique 함수를 쓰기위해 정렬한다.
Cord
#include <vector>
#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++)
{
int a = numbers[i];
int b = numbers[j];
int sum = a + b;
answer.push_back(sum);
}
}
sort(answer.begin(), answer.end());
answer.erase(unique(answer.begin(), answer.end()), answer.end());
return answer;
}
정말 괜찮은 다른 풀이 두가지도 가져와 봤다.
첫 번째 - 굉장히 깔끔한 코드
vector<int> solution(vector<int> numbers) {
vector<int> answer;
set<int> st;
for(int i = 0;i<numbers.size();++i){
for(int j = i+1 ; j< numbers.size();++j){
st.insert(numbers[i] + numbers[j]);
}
}
answer.assign(st.begin(), st.end());
return answer;
}
두 번째 - 풀이의 정석
vector<int> solution(vector<int> numbers) {
vector<int> answer;
vector<bool> visited(201,false);
for(int i=0;i<numbers.size();i++) {
for(int j=i+1;j<numbers.size();j++)
if(visited[numbers[i]+numbers[j]] == false) {
answer.push_back(numbers[i]+numbers[j]);
visited[numbers[i]+numbers[j]] = true;
}
}
sort(answer.begin(),answer.end());
return answer;
}