inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

277

대기업목표

작성한 질문수 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

대기업목표

감사합니다 큰돌님 !!

채점서버 연결 관련 질문입니다

0

20

1

삼성 s직군

0

19

0

삼성 코테 없어짐

0

72

1

코딩살구클럽 가입부탁드립니다

0

39

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

34

2

5-S 테스트 케이스 질문

0

37

2

코살 문제풀이 환경

0

53

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

45

1

추천 추가문제들

0

44

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

50

2

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

44

2

균형 이진 트리 설명 시 높이 숫자

0

33

2

4-H 질문드립니다.

0

37

2

1-K 질문드립니다.

0

43

2

대기업 인적성 시험 질문

0

43

2

4-C 질문드립니다

0

43

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

40

1

코테 준비 질문

0

56

1

살구클럽가입 요청드려요

0

42

2

1-I 문제 질문

0

46

2

코딩살구클럽 가입

0

59

2

AI 코딩 도구 사용 시 학습 방법 조언

0

56

2

코딩살구클럽 오류

0

65

2

코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보

0

51

1