inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

271

대기업목표

작성한 질문수 38

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) 이렇게 비교되는 건가요 ??

c++ 코딩-테스트

답변 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한 인덱스에 해당 값을 설정한 식으로 진행됩니다.

 

감사합니다.

0

대기업목표

감사합니다 큰돌님 !!

4 - A

0

26

2

코딩살구클럽 입장이 안됩니다

0

65

2

4-F 경우의 수 질문입니다.

0

34

2

코딩살구클럽 가입이 안됩니다.

0

76

2

살구 클럽에 대한 질문있습ㄴ디ㅏ

0

57

1

교안 158페이지 문의드립니다

0

45

2

코딩살구클럽 관련 건의사항

0

116

1

코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다

0

44

1

진행 방법 질문드립니다!

0

81

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

63

2

2주차 개념#12 트리 순회

0

32

2

백준사이트가 종료된다고 합니다.

0

316

2

백준 서비스 종료

9

952

1

sk 하이닉스 코테 대비

0

386

2

3-G 최댓값 질문

0

54

1

모듈러 연산 값이 10이 아닌 경우도 있지 않나요?

0

84

2

3-I 코드 질문드립니다.

0

65

2

3-N 질문 있습니다.

0

68

2

학습방법

0

105

2

4-H 질문 있습니다 (코드 리뷰)

0

69

2

코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.

0

183

2

2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.

0

72

2

2주차 개념 #4-2. 인접행렬 질문있습니다.

0

65

2

1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.

0

53

2