본문 바로가기

프로그래머스

[알고리즘] 최빈값 구하기 / 객체

최빈값 구하기

정수 배열이 주어질 때, 최빈값을 구해서 리턴하고 최빈값이 여러개면 -1을 리턴

 

nums result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

나의 풀이:

function solution(nums) {
    var count = {};
    for(let num of nums) {
        if(num in count) {
            count[num] += 1
        }else {
            count[num] = 1
        }
    }
    
    let max_num = 0
    let answer = [];
    
    for(let num in count) {
        if(count[num] > max_num) {
            max_num = count[num]
            answer = [num]
        }else if(count[num] === max_num) {
            answer.push(count[num])
        }
    } 
    
    return answer.length !== 1 ? -1 : parseInt(answer[0])
}

객체를 활용해서 푸는 첫번째 테스트이지 않나 싶다. 그동안 배열로만 문제를 풀어서 객체를 이용해서 푼다는 것을 잊고 있었음.

객체 count 의 키 num 을 추가하고 값에 접근 (count[num])하여 똑같은 숫자가 있으면 1씩증가, 없으면 1 이된다.

 

이후 최빈값을 찾기위해 (value 가 최대인 값) 객체에서 값에 접근해 최빈값을 갱신하는 식으로 작성한다.

중복된 값을 처리하기 위해 값이 같으면 최빈값에 또 다른 최빈값을 추가한다.

 

이후 answer 의 길이가 1이 아니면(중복값이 있다면) -1 을, 1이면 최빈값 리턴.