Programers : 같은 숫자는 싫어

김정욱·2021년 1월 19일
0

Algorithm - 문제

목록 보기
38/249

iterator 적용

  • 중복된 내용을 없애는 내용이다.
  • 나는 iterator를 이용해 앞 원소와 같으면 v.erase()하는 방법을 원했지만 시간초과가 떴다.
    (아마 for에서 N / erase()에서 N이 되어 O(N^2)이 되어서 그런것 같다)
#include <vector>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    int prev = -1;
    for(auto a=arr.begin(); a != arr.end(); a++)
    {
        if(prev == *a)
        {
        /* v.erase() 이후에 a는 삭제 한 자리가 비어서 값을 당겨 다음 값을 가리키게 된다! */
            a=arr.erase(a);
            a--;
        }
        prev = *a;
    }
    return arr;
}
  • 배열로 하면 굉장히 쉽게 풀리지만 unique()라는 것을 찾아서 써보았다.
  • unique는 2개의 매개변수를 받는다 : 중복 찾을 시작위치 , 마지막 위치
  • unique 자체가 중복 원소를 찾아서 없애지는 않고 중복 값들을 vector의 뒤로 밀어낸 후 그 첫 위치를 반환
  • 따라서 erase와 함께 사용해야 vector에서 중복 원소를 없앨 수 있다!!!

코드

#include <vector>
#include <iostream>
#include <algorithm> // unique()를 쓰기 위해 선언

using namespace std;

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

0개의 댓글