문제 링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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를 따로 써줍니다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 176963. 추억 점수 (0) | 2024.05.16 |
---|---|
[프로그래머스 C++] 176962. 과제 진행하기 (0) | 2024.05.15 |
[프로그래머스 C++] 43165. 타겟 넘버 (0) | 2024.05.13 |
[프로그래머스 C++] 42586. 기능개발 (0) | 2024.05.13 |
[프로그래머스 C++] 250137. 1번 / 붕대 감기 (0) | 2024.05.10 |