개발 로그/알고리즘

프로그래머스) 찾아라 프로그래밍 마이스터 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());
}

 

 

좀 어려운거 풀어야하는데.. 일단 기본이 최고인것 같아서 강의하나 듣고 천천히 진행하기로함.

https://www.coursera.org/specializations/algorithms