개발 로그/알고리즘
프로그래머스) 찾아라 프로그래밍 마이스터 c++
k._.
2021. 8. 31. 08:21
정렬하고, 달라지는 지점을 하나씩 더하면, 내가 고를 수 있는 방법의 가지수가 된다.
내가 고를 수 있는 수와 같으면 return.
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> nums)
{
int answer = 1;
sort(nums.begin(),nums.end());
for(int i =0; i < nums.size()-1; i++){
if(answer == (nums.size()/2)) return answer;
if(nums[i]!=nums[i+1]) answer++;
}
return answer;
}
unordered set을 왜 생각못했을까. 아래는 unordered set을 활용한 다른 사람의 풀이.
1. 중복을 허용하지 않는다는 stl의 특성을 잘 살렸다.
2. 내가 몰랐던 사실은, unordered set s을 선언할때, vector를 바로 받을 수 있다는 것.
3. 심지어 vector를 정렬하면서 전달가능 하다는 것.
#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());
}
좀 어려운거 풀어야하는데.. 일단 기본이 최고인것 같아서 강의하나 듣고 천천히 진행하기로함.