알고리즘

[프로그래머스/C++] 최빈값 구하기

Dev_Lee 2023. 3. 7. 22:24
  • 최빈값 구하기
문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.


제한사항
  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예arrayresult
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

예전에 비슷한 문제를 풀었던 기억이나서

우선 각 값 별 몇회 나왔는지 저장하는 count 배열을 만들었음

[1,1,2,2]의 array가 주어지면

count[1] = 2, count[2] = 2 가 될수있게 저장을 해두고

count 배열에서 반복문을 실행하며

가장 큰 수가 저장된 위치를 찾아주면됨

그리고 max가 같은 위치가 더 있으면 -1을 출력하도록 했음

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> array) {
    int answer = 0;
    int count[1001] ={0};
    int num = 0;
    int max = 0;     // 가장큰수
    int max_cnt = 0; // 가장 큰수가 몇번 나오는지

    for(int i = 0; i < array.size(); i++)
    {
        num = array[i];
        count[num]++;
    }
    
    for(int i = 0; i < 1001; i++)
    {
        if(max_cnt != 0 && max_cnt == count[i])
        {
            answer = -1;
        }
        else if(count[i] > max_cnt)
        {
            max = i;
            max_cnt = count[i];
            answer = max;
        }
    }
   
    return answer;
}

처음 실행했을땐 막 700 이런 값 나오면서 실패했는데

내가 배열 선언하면서 초기화를 안해줘서 그런듯

배열 0으로 초기화하니까 정상적으로 잘 나옴