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

joy_five·2023년 1월 12일
0

최빈값 구하기

문제 설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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

예시 설명

입출력 예설명
입출력 예 #1[1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
입출력 예 #2[1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
입출력 예 #3[1]에는 1만 있으므로 최빈값은 1입니다.

풀이

function solution(array) {
    var answer = 0;
    array.sort(function(a,b){return a-b}) //오름차순
    var obj = {
        count : 1,
        value : 1
    } //객체 생성
    if (array.length === 1) { 
        return array[0] // 배열의 길이가 1이면 배열의 0번째를 반환
    } else {
        var count = 1; //카운트 변수 선언
    for (i=0; i < array.length; i++) {
        if (array[i] === array[i+1]) { 
            count += 1 // 같은 인자가 있으면 카운트 상승
        } else{
                if (obj.count === count) {
                    obj = {...obj, count : count, value : [obj.value, array[i]] }
                } // 변수와 기존 obj.count 가 같으면 배열로 변환해버리기
                else if (obj.count < count) {
                    obj = {...obj, value : array[i], count : count}
                } // 변수가 기존 obj.count 보다 크다면! 새 value와 count 넣어주기
                else {
                    obj = obj
                } // 아니면 그냥 obj 그대로 두기
                count = 1 // 변수 리셋
           }
        }
    }
    answer = typeof obj.value === 'object' ? -1 : obj.value
    // 배열이라면 최빈값이 여러개이고, number 타입이라면 최빈값이 유일하므로 typeof 로 배열을 찍으면 'object'가 나오는 걸로 삼항연산
    return answer;
}
profile
😤 Started in Sep. 2022 😎 I'm going to further!

0개의 댓글