본문 바로가기

Algorithm/Programers - C++

[프로그래머스]포켓몬 / Set

문제

풀이

#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> nums)
{
    int answer = 0, n = nums.size()/2;
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(),nums.end()), nums.end());
   
    return min((int)nums.size(), n);
}

1. 중복값 없애주기.

2. N/2와 포켓몬 종류의 개수 중에서 최솟값 return 하기.

 

 

 

 


다른 사람 풀이

#include <bits/stdc++.h>
using namespace std;

int solution(vector<int> nums) {
    unordered_set<int> s(nums.begin(), nums.end());

    return min(nums.size() / 2, s.size());
}

나는 sort와 unique, erase를 사용해 중복되는 값을 없앴지만 그보다 더 쉬운 방법이 있었다.

set은 중복 값을 가지지 않는 컨테이너이기 때문에, 복잡한 과정 없이 중복값 제거를 할 수 있었던 것이다!

 

 

 

 

set

set은 특정 기준에 의하여 원소들이 자동 정렬되는 노드 기반 컨테이너이다.

기본적으로 오름차순(less) 정렬이고 greater 조건자를 줌으로써 내림차순으로 정렬할 수도 있다.

set은 유일한 원소만을 가질 수 있는 구조로서 수학적으로 집합을 의미하며, 

중복된 원소를 갖고자 한다면 multiset을 사용하여야 한다.

 

 

 

unordered_set

삽입된 순서를 유지하고 싶을 경우 사용한다.

정렬이 되지 않는다는 점을 빼면 set과 동일하다.

 

 


https://notepad96.tistory.com/entry/STL-Unorderedset-multiset-%EC%83%9D%EC%84%B1-%EC%82%BD%EC%9E%85-%EC%82%AD%EC%A0%9C-%EB%93%B1-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[STL] Unordered_set, multiset 생성, 삽입, 삭제 등 사용법

1. unordered_set, _multiset set과 multiset은 값을 삽입시키면 자동으로 정렬이되어 저장되는 구조였다. 만약 정렬을 하지 않고서 삽입한 일련의 순서를 유지시키고 싶다. 라고 한다면 unordered_set을 사용

notepad96.tistory.com

https://notepad96.tistory.com/25

 

[STL] Set 생성, 삽입, 삭제 등 사용법

1. set set은 특정 기준에 의하여 원소들이 자동 정렬되는 노드 기반 컨테이너이다. set은 기본적으로 오름차순(less) 정렬이고 greater 조건자를 줌으로써 내림차순으로 정렬할 수도 있다. set은 유일

notepad96.tistory.com