문제
풀이
#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/25
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스]약수의 개수와 덧셈 (0) | 2022.02.03 |
---|---|
[프로그래머스]3진법 뒤집기 (0) | 2022.02.02 |
[프로그래머스]탐욕법 - 체육복 (0) | 2022.01.30 |
[프로그래머스]완전탐색 - 모의고사 (0) | 2022.01.27 |
[프로그래머스]정렬 - K번째수 (0) | 2022.01.26 |