📝23.12.28
🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/120812
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
내가 작성한 풀이
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> array) {
int amount[1001] = {0};
for(int i = 0; i < array.size(); i++) {
int num = array.at(i);
amount[num]++;
}
int answer = 0;
int max = 0;
for(int i = 0; i < 1001; i++) {
if(amount[i] > max) {
max = amount[i];
answer = i;
} else if(amount[i] == max) {
answer = -1;
}
}
return answer;
}
다른 사람의 unordered map을 이용한 풀이
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<int> array) {
int answer = 0;
int maxV = 0;
unordered_map<int,int> um;
for(const auto v : array)
{
um[v]++;
}
for(const auto& v : um)
{
if(v.second > maxV)
{
maxV = v.second;
answer = v.first;
}
else if(v.second == maxV)
{
answer = -1;
}
}
return answer;
}
unordered_map을 이용하면 키와 값을 바로 저장할 수 있어 범위 오류가 나지 않는 장점이 있다. 다음엔 해당 방법을 참고해야겠다.