728x90
https://programmers.co.kr/learn/courses/30/lessons/1845
#include <vector>
#include <set>
using namespace std;
int solution(vector<int> nums) {
set<int> s;
for (int i = 0; i < nums.size(); i++) {
s.insert(nums[i]);
}
if (s.size() <= nums.size() / 2) {
return s.size();
}
else {
return nums.size() / 2;
}
}
일단 이렇게 set으로 간단하게 풀었다. vector를 set으로 복사하는 함수를 몰라서 일단 저렇게 for문을 돌려서 풀고나서 vector를 set으로 복사하는 방법을 찾아봤다.
http://www.cplusplus.com/reference/set/set/set/
여기에 있는 생성자들 중 range에 해당하는 방법으로 vector의 원소들을 원소로 가지는 set으로 만들 수 있다.
만약 v라는 int 타입의 vector가 있고 그것의 원소들을 원소로 가지는 set s을 만들고 싶다면
set<int> s(v.begin(), v.end());
이렇게 하면 된다.
따라서 이 방법을 이용해서 폰켓몬을 풀면 코드가 다음과 같이 더 짧아진다.
#include <vector>
#include <set>
using namespace std;
int solution(vector<int> nums) {
set<int> s(nums.begin(), nums.end());
if (s.size() <= nums.size() / 2) {
return s.size();
}
else {
return nums.size() / 2;
}
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[프로그래머스] 큰 수 만들기 (0) | 2020.07.30 |
---|---|
[프로그래머스] 땅따먹기 (0) | 2020.07.30 |
[백준] 1780번 종이의 개수 (0) | 2020.04.11 |
[백준] N M 찍기 (0) | 2020.04.11 |
[백준] 10815번 숫자 카드 (0) | 2020.04.11 |