[프로그래머스 Lv1] 두 개 뽑아서 더하기

수민이슈·2023년 3월 22일
0

[C++] 코딩테스트

목록 보기
9/116
post-thumbnail

🖊️ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/68644

🖊️ 풀이

일단,, 또 재귀로 풀까? 했는데
레벨1이고
정답률도 높은 편이고
일단 개수가 100개라서 뭔가,, 그냥 이중포문으로 냅다 박아버려도 될 것 같았다
그건 맞았슴

근데 정렬하고, 중복을 제거해야 한다는 점에서
<algorithm>에서 sort(), unique()를 써야겠다는건 알겠는데
어라
unique하고나서 계속 이상한거임

벡터의 중복 원소 제거하는 방법

vector<int> v;
sort(v.begin(), v.end());						// 오름차순으로 정렬해준 다음에
v.erase(unique(v.begin(), v.end()), v.end());	// unique해주고 그 다음부터 벡터의 끝까지 원소를 제거

긍까
벡터를 정렬해놓고
unique() 하면 앞부분은 unique하게 되고
중복되는 부분이 뒤로 가는데 거기서부터 끝까지 중복된 원소들을 제거해주면 되는고임 ~

🖊️ 코드

#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.emplace_back(numbers[i] + numbers[j]);
        }
    }
    sort(answer.begin(), answer.end());
    answer.erase(unique(answer.begin(), answer.end()), answer.end());
    
    return answer;
}

0개의 댓글