문제 설명
정수 배열 numbers가 주어집니다.
numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers의 길이는 2 이상 100 이하입니다.
- numbers의 모든 수는 0 이상 100 이하입니다.
입출력 예
numbers | result |
[2,1,3,4,1] | [2,3,4,5,6,7] |
[5,0,2,7] | [2,5,7,9,12] |
입출력 예 설명
입출력 예 #1
- 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
- 3 = 2 + 1 입니다.
- 4 = 1 + 3 입니다.
- 5 = 1 + 4 = 2 + 3 입니다.
- 6 = 2 + 4 입니다.
- 7 = 3 + 4 입니다.
- 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.
입출력 예 #2
- 2 = 0 + 2 입니다.
- 5 = 5 + 0 입니다.
- 7 = 0 + 7 = 5 + 2 입니다.
- 9 = 2 + 7 입니다.
- 12 = 5 + 7 입니다.
- 따라서 [2,5,7,9,12] 를 return 해야 합니다.
<내풀이>
#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(); 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;
}
<다른 사람의 풀이>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
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;
}
일단 내풀이부터 설명하겠다.
서로 다른 인덱스의 합을 구하는 것 이기 때문에, 이중 반복문을 돌면서 안쪽에 j를 이용하는 반복문은,
i와 같으면 안되므로 i+1부터 반복문을 돌게해서 합을 구해주고 answer에 push_back 해주었다.
그 후, sort를 하고 unique함수를 이용해서 중복을 제거해주었다.
unique함수는 범위를 지정해주면 지정한 범위내의 중복되는 값들을 벡터의 맨 뒤로 보내버린다.
그리고 맨뒤에 보낸값들 중 제일 처음의 인덱스를 반환한다.
따라서 unique를 사용하고나서 그것부터 끝까지 지우면 중복되는 원소들은 다 지워지는 셈이다.
이제 다른 사람의 풀이를 보자.
나도 처음에 중복을 허용하지 않는다길래 set을 생각했었으나 익숙치않아서 vector로 풀었다.
set은 중복을 허용하지 않고, 자체적으로 원소들이 정렬되기 때문에 이문제에 딱맞는 풀이법이 아닌가싶다.
set에 더한값들을 insert해주고, 그 값들을 answer에 할당해주고 answer를 return한 깔끔한 풀이이다.
'PS > Programmers' 카테고리의 다른 글
Programmers / Level 2 / 오픈채팅방 / C++ (0) | 2021.11.10 |
---|---|
Programmers / Level 1 / 실패율 / C++ / JS (0) | 2021.11.08 |
Programmers / Level 1 / 약수의 개수와 덧셈 / C++ (0) | 2021.11.04 |
Programmers / Level 1 / 폰켓몬 / C++ (0) | 2021.11.01 |