티스토리 뷰

반응형

대충 이런 문젠데

일단 배열 원소끼리 다 더하고

중복되는 값을 없애고

오름차순 정렬해주면되겠다 생각했다

관건은 중복되는 값 없애기 였다

 

 

 

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> sum;
    vector<int> answer;
    for(int i=0; i<numbers.size()-1; i++){
        for(int j=i+1; j<numbers.size(); j++){
            sum.push_back(numbers[i]+numbers[j]);
        }
    } 
    sort(sum.begin(),sum.end());        //sum 오름차순 정렬
    
    
    int ansidx=0;
    answer.push_back(sum[0]);
    
    for(int i=1; i<sum.size(); i++){
        if(answer[ansidx]!=sum[i]){ //중복되는 값이 아니면
            answer.push_back(sum[i]); //값 삽입 후
            ansidx++;           //ansidx증가
        }
    }
    
    return answer;
}

나의 코드다

일단 원소끼리 더한걸 sum이란 벡터에 다 넣어주고

sum을 오름차순 정렬해준다

 

그 후에

answer에 sum의 최솟값을 집어넣고

sum의 원소를 반복문 돌면서

현재 answer에 들어가 있는 값과 중복되지 않는 값만 넣어주도록 짰다

 

원래 다 넣고 erase로 지워주려다가

값이 2개 중복되면 상관없는데

3개 중복되면 안 없어지는 현상이 발생해서

 

그냥 오름차순으로 정렬해서 넣어줄때 값이 이미 들어가있는지 체크해주는 방식으로 짰다

근데 다 풀고 다른 사람들 풀이를 보니까

 

 

 

 

#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;
}

ㅓsort -> unique -> erase를 하면 중복제거가 간편하게 된다

원리를 보면

unique를 쓰려면 sort가 되어있는 상태여야한다

그 이유는 unique는 연속된 중복값을 vector의 제일 뒷부분으로 쓰레기 값으로 보내버리기 때문이다

 

 

그래서 sort 후에 unique(answer.begin(),answer.end())를 하면

unique가 끝나고 반환되는 값은 vector의 쓰레기 값의 첫번째 위치가 된다(중복되는 값들의 위치)

 

 

예를 들면

1 1 1 2 2 3에다가

unique를 하면 1 2 3 (쓰레기 값 쓰레기 값 쓰레기 값 쓰레기값)

이렇게 되는데

unique후에 반환되는 값이 쓰레기 값의 첫번째 원소이므로

거기서부터 마지막까지 지워버리면 된다

 

sort(answer.begin(),answer.end());

answer.erase(unique(answer.begin(),answer.end()),answer.end());

그래서 이런 문법이 나오는것 같다

 

 

아직은 생소하지만

중복 제거는 unique로 하는게 편하다는 것을 알게됐으니

생각나면 활용해야겠다

근데 내가 짠것도 괜찮은 코드같은데ㅋㅋㅋ

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함