지우너

[프로그래머스 / Lv.0] 최빈값 구하기 cpp 본문

Problem Solving

[프로그래머스 / Lv.0] 최빈값 구하기 cpp

지옹 2023. 12. 6. 20:05

다른 0레벨 문제들보다 조금 더 고민이 필요했던 문제였다. 

 

array의 원소가 몇 개 나왔는지 저장하기 위해 vector<pair<int, int>>clean_arr 를 선언했다.

clean_arr[i].first는 어떤 수가 저장되고, clean_arr[i].second에는 그 수가 몇 개 있는지 저장한다.

array의 원소를 차례대로 돌면서 해당 값이 clean_arr에 있을 경우 clean_arr.second의 수를 1증가시킨다.

clean_arr를 모두 돌았는데 array의 원소와 같은 값이 없다면(isExist=false라면) clean_arr에 해당 원소를 넣는다.

 

최대 갯수를 저장하기 위한 max와 최대 갯수인 수를 저장하기 위한 answer을 선언했다.

clean_arr를 돌면서 clean_arr.second의 값이 max보다 크다면 현재까지의 최대갯수 max를 갱신해주고, 최대갯수인 수를 answer에 저장해준다. 만약 clean_arr.second가 max와 같다면 -1을 return하고 종료한다.

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> array) {
    vector<pair<int, int>> clean_arr;
    for (auto e: array){
        bool isExist= false;
        for (int j=0;j<clean_arr.size(); j++){
            if (clean_arr[j].first == e) {
                clean_arr[j].second++;
                isExist = true;
            }
        }
        if (!isExist) clean_arr.push_back(make_pair(e, 1));
    }
    
    // 최빈값 찾기
    int max = -1;
    int answer = 0;
    for (int i =0; i<clean_arr.size();i++){
        if (clean_arr[i].second > max) {
            max = clean_arr[i].second;
            answer = clean_arr[i].first;
        }
        else if (clean_arr[i].second == max) return -1;
    }
    
    return answer;
}

 

위 코드로  코드 실행을 돌리니 [1, 2, 3, 3, 3, 4] 이 입력에 대해 output이 3이 나와야 하는데 -1이 나왔다.

 

 

뭐가 문제인지 알 수 없어 그냥 sort해서 clean_arr[0].second와 clean_arr[1].second가 같으면 -1을 return하고,

그게 아니라면 clean_arr[0].first를 return하도록 했다.

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(pair<int, int>v1, pair<int, int>v2){
    return v1.second > v2.second;
}
int solution(vector<int> array) {
    vector<pair<int, int>> clean_arr;
    for (auto e: array){
        bool isExist= false;
        for (int j=0;j<clean_arr.size(); j++){
            if (clean_arr[j].first == e) {
                clean_arr[j].second++;
                isExist = true;
            }
        }
        if (!isExist) clean_arr.push_back(make_pair(e, 1));
    }
    
    // 최빈값 찾기
    sort(clean_arr.begin(), clean_arr.end(), cmp);
    if (clean_arr[0].second == clean_arr[1].second) return -1;
    return clean_arr[0].first;
}