인프런 커뮤니티 질문&답변

대기업목표님의 프로필 이미지
대기업목표

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

unique() 함수 과정 질문있습니다

해결된 질문

작성

·

228

·

수정됨

0

안녕하십니까 큰돌님

vector<int> s {10, 30, 20, 20, 40, 40, 40, 50, 10, 20, 30};

unique(s.begin(), s.end());

하면 결과가 10 30 20 40 50 10 20 30 10 20 30

이렇게 나오는데

궁금한게 첨부한 사진처럼 20 20 비교하면 중복되니까 뒤에 20이 날라가면서 앞에 남아있는 20과 다음 숫자 40을 비교하는 거죠 ??IMG_1291.jpeg

아니면 설명이 날라간다는 표현인 거고 20 20 40 있을 때 20 (20 40) 이렇게 비교되는 건가요 ??

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 대기업님 ㅎㅎ

궁금한게 첨부한 사진처럼 20 20 비교하면 중복되니까 뒤에 20이 날라가면서 앞에 남아있는 20과 다음 숫자 40을 비교하는 거죠 ??

>> 이게 맞는 설명입니다.

더 정확히 말씀 드리면요.

10 20 20 20 20 30 이렇게 있을 때

1번째 20 에서 쭉 다음 2번째 20 3번째 20 이렇게 넘기면서 쭉 가다가.

30이 나왔을 때

10 20 30 이렇게 만들어버리고 30에 해당하는 이터레이터를 반환하게 되는 것입니다.

unique의 내부코드는 다음과 같습니다.

template <class ForwardIterator>
  ForwardIterator unique (ForwardIterator first, ForwardIterator last)
{
  if (first==last) return last;

  ForwardIterator result = first;
  while (++first != last)
  {
    if (!(*result == *first))  // or: if (!pred(*result,*first)) for version (2)
      *(++result)=*first;
  }
  return ++result;
}

unique를 진행할 범위에서 first를 증가시키면서 result를 통해 만약 같은 수가 아니라면 ++result한 인덱스에 해당 값을 설정한 식으로 진행됩니다.

 

감사합니다.

감사합니다 큰돌님 !!

대기업목표님의 프로필 이미지
대기업목표

작성한 질문수

질문하기