문제 링크 https://programmers.co.kr/learn/courses/30/lessons/68644
문제
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
풀이 과정
이중 for문을 돌려 answer 벡터에 합들을 다 넣어준다.
오름차순으로 정렬하고 중복인 숫자는 erase함수로 제거해준다.
풀이1
#include <string>
#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++){
answer.push_back(numbers[i] + numbers[j]);
}
}
sort(answer.begin(), answer.end());
answer.erase(unique(answer.begin(), answer.end()), answer.end());
return answer;
}
erase 함수 구현할 때, temp 배열의 크기 설정을 잘 해줘야된다.
numbers 배열의 길이가 100이하이므로, 두 수의 합은 100 * 100 가지의 수므로
10001로 해줘야한다.
풀이2
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
vector<int> v;
for(int i = 0; i < numbers.size() - 1; i++){
for(int j = i + 1; j < numbers.size(); j++){
v.push_back(numbers[i] + numbers[j]);
}
}
// sort 오름차순 구현
for(int i = 0; i < v.size(); i++){
for(int j = 0; j < v.size(); j++){
if(v[i] < v[j]){
int temp = v[i];
v[i] = v[j];
v[j] = temp;
}
}
}
// erase 함수 구현
int n = 1;
int temp[10001];
temp[0] = v[0];
for(int i = 1; i < v.size(); i++){
if(v[i] != temp[n - 1]){
temp[n++] = v[i];
}
}
for(int i = 0; i < n; i++){
answer.push_back(temp[i]);
}
return answer;
}
댓글남기기