[C++] 중복된 값 없애기- Set, 프로그래머스 lv1 두수 뽑아서 더하기

minzero·2024년 8월 7일

Cpp

목록 보기
3/7
post-thumbnail

1. Set

고유한 객체의 정렬된 자료구조를 말한다.
검색, 제거, 삽입의 작동은 O(logn)의 시간 복잡도를 가진다.

2. C++에서 Set 선언 및 사용 방법

set<int> answer;

//삽입
answer.isert(10);

//조회
set<int>:: iterator it::

for (it=answer.begin(); it!=answer.end(); it++){
	cout<<*it<<endl;

}

3. Set 멤버 함수

  1. size() : 노드 개수
  2. empty() : 사이즈가 0인지 판단
  3. begin() : 첫 번째 원소를 가리키는 iterator 반환
  4. end() : 마지막 원소를 가리키는 iterator 반환
  5. insert(k) : 값이 k인 노드 추가
  6. erase(k) : 값이 k인 노드 삭제
  7. find(k) : 값이 k인 노드의 iterator 반환 (값이 존재하지 않는 경우 마지막 원소를 가리키는 iterator 반환)
  8. count(k) : 값이 k와 일치하는 노드 개수 반환

4. 프로그래머스 lv1. 두수 뽑아서 더하기

  • 두 수를 뽑은 후 중복을 제거하고 동시에 정렬된 채 자료를 저장할 수 있는 set을 알게 되어 이를 사용했다!
  • 그리고 for문을 돌려 각 수를 조회해 vector에 삽입하여 return했다. (return 형식이 vector였기 때문 뭐때문인지 모르겠지만 set으로 형식을 바꾸면 에러남)
vector<int> solution(vector<int> numbers) {
    set<int> answer;
    vector<int> ans;
    for (int i=0; i<numbers.size()-1; i++){
        for (int j=i+1; j<numbers.size(); j++){
            int sum=numbers[i]+numbers[j];
            answer.insert(sum);
        }
    }
    set<int> :: iterator it;
    for (it=answer.begin(); it!=answer.end(); it++){
        ans.push_back(*it);
    }
    return ans;
}

| 참고 블로그
https://wannabe-gosu.tistory.com/8
https://infjin.tistory.com/68

0개의 댓글