두 개 뽑아서 더하기

NJW·2021년 8월 23일
0

코테

목록 보기
72/170

들어가는 말

각 수들을 더한 값을 오름차순으로 중복 없이 구하는 문제이다.

코드 설명

먼저 이중 반복문을 사용해서 숫자를 하나씩 더해준다. 총 다섯개라고 가정하면, 밑의 계산이 된다.
0+1 ~ 0+4
1+2 ~ 1+4
2+3 ~ 2+4
3+4
그 다음 값들을 sort함수로 정렬한 후, erase(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()-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;
}

P.s

저번에 배웠던 unique와 erase함수를 이용했다!!!
다른 사람들의 풀이를 보니, set 헤더를 이용한 풀이가 있었다.
#include을 이용해, set은 중복된 값을 허용하지 않는 다는 점을 이용한 모양이다(ㅎㄷㄷ...). 게다가 st.insert()를 이용해서 set 헤더의 insert는 원소를 자동으로 정렬한다는 성질을 이용했다(심지어 디폴트가 오름차순!!!).
마지막으로 assign으로 set로 이용했던 값을 answer에 넣어주었다. 굳이 assign을 이용하지 않고 그냥 반환해도 될 거 같다.

profile
https://jiwonna52.tistory.com/

0개의 댓글