지우너
[프로그래머스 / Lv.0] 최빈값 구하기 cpp 본문
다른 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;
}
'Problem Solving' 카테고리의 다른 글
[프로그래머스 Lv.0] 안전지대 C++ (0) | 2024.03.01 |
---|---|
[프로그래머스] C++ 세균 증식 (0) | 2024.02.29 |
[PCCE 기출문제/C++] 8번 / 창고 정리 (0) | 2023.12.06 |
[프로그래머스] lv.0 그림확대 (0) | 2023.12.05 |
[백준(BOJ)] 1517 버블소트 C++ (0) | 2023.03.01 |