본문 바로가기

코딩테스트/프로그래머스

[프로그래머스 C++] 12906. 같은 숫자는 싫어

문제 링크


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

접근 방법


연속적으로 나타나는 숫자를 없애는 unique함수를 사용합니다.

소스 코드


#include <vector>
#include <algorithm>

using namespace std;

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

코드 설명


unique 함수는 인접한 중복 요소들만 제거합니다. 이 함수는 주어진 범위 내에서 

연속적으로 중복되는 요소들을 범위의 끝으로 이동시키고, 

중복되지 않는 요소들만 남기는 새로운 "끝"을 가리키는 반복자를 반환합니다.

이 반환된 반복자 이후의 요소들은 범위에서 제거되지 않고 그대로 남아 있으므로,

erase 함수를 사용하여 실제로 제거해야 합니다.

예를 들어, 벡터에 [1, 1, 2, 2, 3, 4, 4]가 저장되어 있을 때 unique 함수를 호출하면, 

중복되지 않는 요소 [1, 2, 3, 4]만 벡터의 앞으로 가져옵니다.

그러므로 [1, 2, 3, 4, 3, 4, 4]와 같이 변할 수 있으며, 여기서 3, 4, 4는 처리되지 않은 상태입니다.

unique 함수가 반환하는 반복자는 첫 번째 3을 가리키므로, 이 반복자부터 벡터의 끝까지를 erase로 제거해야 합니다.

 

또한 erase는 삭제한 요소의 위치를 가리키는 반복자를 반환하므로, return을 바로 못 시킵니다.

따라서 return arr를 따로 써줍니다.