본문 바로가기
Practice & Study/프로그래머스

프로그래머스>코딩테스트 입문>최빈값 구하기 (C++) | sort, max_element

 

나의 풀이

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> array) {
    vector<int> frequency;
    int cnt = 0;
    int num;

    sort(array.begin(), array.end());
    num = array.at(0);
    for(auto& a : array) {
        if(a != num) {
            num = a;
            frequency.push_back(cnt);
            cnt = 0;
        }
        cnt++;
    }
    frequency.push_back(cnt);

    int max_num = *max_element(frequency.begin(), frequency.end());
    int max_index = max_element(frequency.begin(), frequency.end()) - frequency.begin();

    cnt = 0;
    for (auto& f : frequency) {
        if (max_num == f) {
            cnt++;
        }
    }
    if (cnt > 1) {
        return -1;
    }

    array.erase(unique(array.begin(), array.end()), array.end());
    return array.at(max_index);
}

받아온 배열을 정렬해서

새로 만든 배열에 빈도를 기록한다. 

 

빈도 배열에서 최대값을 찾고 최대 빈도값이 2개 이상이면 -1을 반환한다.

그렇지 않으면 받아온 배열의 중복 값을 제거하고 인덱스값을 이용하여

최대 빈도를 가지는 숫자를 반환한다. 

 

 

깔끔하지 못한 코드라고 생각하고 시간도 조금 걸렸는데

다른 사람들 풀이를 보니까 나름 괜찮아보인다.

깔끔하게 풀기 어려운 문제인가보다.