https://school.programmers.co.kr/learn/courses/30/lessons/68644
풀이법
STL의 컨테이너인 Set이 중복을 허용하지 않으면서 자동정렬된다는 점을 이용해 문제를 쉽게 해결할 수 있었다. 이중 for문은 옛날에 많이 했던 별피라미드 알고리즘과 유사하다.
#include <string>
#include <vector>
#include <set>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
set<int> result;
int num = numbers.size();
for (int i = 0; i < num; i++)
{
if (i != num - 1)
{
for (int k = i + 1; k < num; k++)
{
result.insert(numbers[i] + numbers[k]);
}
}
}
for (int i : result)
{
answer.push_back(i);
}
return answer;
}
보완점
굳이 이중for문안에 if문을 넣어줄 이유가 없었다. 마지막 계산을 하지 않겠다는 의도였으나 해도 무방하므로 가독성을 위해 지운다. 또한 마지막 for문을 통해 set에서 vector로 값을 복사해주는 것이 나오는데 다른풀이를 보니 vector의 메소드인 assign을 이용하면 for문을 쓰지 않고 쉽게 복사가 가능하다.
#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;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[220811] Level_ 1 음양 더하기 (0) | 2022.08.11 |
---|---|
[220809] Level 1_ 두 정수 사이의 합 (0) | 2022.08.09 |
[220807] Level_ 1 모의고사 (0) | 2022.08.07 |
[220806] Level_ 1 2016년 (0) | 2022.08.06 |
[220805] Level_ 1 완주하지 못한 선수 (오답노트) (0) | 2022.08.05 |