예를 들어, array = [1,2,3,3,3,4]의 최빈값은 가장 많은 빈도의 3이어야 하고,
array = [1,1,2,2]의 최빈값은 1, 2의 빈도수가 같으므로 출력값은 -1로 나와야 합니다.
1. 각 원소의 개수를 센다. ex) a의 개수 = 3, 최빈값 = a
2. 연속한 배열값이 같다면 수를 증가하고, 다르면 개수를 비교한다.
3. 앞서 셌던 숫자의 개수보다 지금의 개수가 많다면, 최빈값이 바뀐다. ex) b의 개수 = 4, 최빈값 = b
4. 개수가 같다면 최빈값은 -1이다.
function solution(array) {
const length = array.length; //array 길이
let mode; // 최빈값
let Subcount = 0; // 최빈값의 수
let count = 0; // 현재값의 수
if(length === 1){ // 배열 길이가 1이라면, 최빈값은 어짜피 하나로 정해져 있다.
mode = arr[0];
}else{
for(i=0; i<length; i++){
if(arr[i] === arr[i+1]){ //값이 같다면 현재값+1
count = count + 1;
}else{
count = count + 1; //다르면 현재값 +1 하고 개수 비교
if(Subcount < count){
Subcount = count;
mode = arr[i];
}else if(Subcount === count){
mode = -1;
}
count = 0; //count를 0으로 초기화
}
}
}
var answer = mode;
return answer;
}
그런데 이렇게 했더니 오류가 떠서 고민을 많이 했는데, 문제는 아주 사소한 것이었어요.
배열값이 오름차순으로 정렬되어있는 것을 기준으로 작성한 것인데 그 조건을 뺴놓고 작성을 해버렸던 것이었어요.
function solution(array) {
const length = array.length;
const arr = array.sort();
let mode;
let Subcount = 0;
let count = 0;
for(i=0; i<length; i++){
if(arr[i] === arr[i+1]){
count = count + 1;
}else{
count = count + 1;
if(Subcount < count){
Subcount = count;
mode = arr[i];
}else if(Subcount === count){
mode = -1;
}
count = 0;
}
}
var answer = mode;
return answer;
}
배열을 오름차순으로 정렬해주는 sort함수를 바로 추가해주었습니다.
그리고 생각해보니 배열 길이가 1인 경우를 굳이 추가하지 않아도 상관 없어서 빼버렸어요.
아주 간단하게 적어놨지만 저 문제 푸는데 꼬박 하루 걸린 것 같네요.
풀고나면 정말 별거 없는데 왜 이리 어려운지... 참 알다가도 모르겠습니다.