프로그래머스 - 같은 숫자는 싫어

well-life-gm·2021년 12월 21일
0

프로그래머스

목록 보기
98/125

프로그래머스 - 같은 숫자는 싫어

vector의 unique + erase를 연습해보는 문제이다.

unique는 vector내에서 중복되는 원소들은 뒤로 보내고, 중복되는 원소가 시작하는 주소를 반환한다.
예를 들어 [1,1,2,2,3,4]에 unique를 사용하면 [1,2,3,4,1,2]가 되고 5번째 원소인 1의 주소를 반환한다.

erase는 주소의 시작과 끝, 두 개를 인자로 받고, 해당 부분의 원소를 삭제한다.

unique와 erase를 이용하면 벡터 내의 중복된 원소를 삭제하면서 순서를 그대로 유지할 수 있다.

다음 코드는 unique, erase 없이 그냥 푼 코드이고, 그 아래 코드는 unique, erase로 푼 코드이다.

#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
    int before = -1;
    for(auto it : arr) {
        if(before < 0) {
            answer.push_back(it);
            before = it;
        } else {
            if(it == before)
                continue;
            answer.push_back(it);
            before = it;
        }
    }
    return answer;
}
// unique + erase
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    arr.erase(unique(arr.begin(), arr.end()), arr.end());
    return arr;
}

결과

profile
내가 보려고 만든 블로그

0개의 댓글