728x90
반응형
풀이 방법
우선 가장 처음으로 든 생각은 각 숫자의 합을 배열에 넣어서 정렬하고 중복을 제거하면 되겠다 !
정말 단순하게 생각한 방법이었다.
물론 쉽게 답을 맞출 수 있었는데 다른 사람의 풀이를 보다가 set 을 이용한 방법으로 푼 사람을 보게 되었다.
전혀 생각지도 못한 방법이었기 때문에 워후... 이런 방법도 있구나 생각했다.
set 의 특징 중 하나가 key 값을 중복 값을 허용하지 않는다는 점이다.
그리고 insert() 함수를 사용하게 되면 값을 입력할 때 자동으로 정렬되어 값이 들어가게 된다.
set 을 사용하면 정렬과 중복 제거가 동시에 이루어지기 때문에 정말 이 문제를 위한 컨테이너다.👍
소스 코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
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());
for(int i=0; i<answer.size(); i++) {
cout << answer[i] << " ";
}
return answer;
}
set 을 이용한 소스 코드
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
set<int> tmp;
for(int i=0; i<numbers.size(); i++) {
for(int j=i+1; j<numbers.size(); j++) {
// insert 를 통해 입력하면 자동으로 정렬된다.
tmp.insert(numbers[i] + numbers[j]);
}
}
// answer 배열에 할당해준다.
answer.assign(tmp.begin(), tmp.end());
return answer;
}
728x90
반응형
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] Level 2. 삼각 달팽이 (C++) (0) | 2021.03.28 |
---|---|
[Programmers] Level 1. 신규 아이디 추천 (C++) (0) | 2021.03.22 |
[Programmers] Level 1. 크레인 인형뽑기 게임 (C++) (0) | 2021.03.22 |
[Programmers] Level 2. 위장 (C++) (0) | 2019.08.31 |
[Programmers] Level 2. 스킬트리 (2018 윈터코딩 / C++) (0) | 2019.08.12 |