Programmers | 최빈값 구하기

HN·2023년 10월 31일
0

프로그래머스

목록 보기
24/30
post-custom-banner

최빈값 구하기

❔문제설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

제한사항

  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000







풀이

깔끔하고 간결하진 않지만 일단 풀었으니까...!ㅎ

function getKeyByValue(obj, maxValue) {
    let arr = []
    for(let [key, value] of obj) {
        if (value == maxValue) arr.push(key)
    }
    return arr
}

function solution(array) {
    if(array.length == 1) return array[0]
    if(array.length == 0) return -1
    
    const arrMap = new Map()
    let max = 0
    
    for(let i = 0; i < array.length; i++) {
        if(!arrMap.has(array[i])) arrMap.set(array[i], 1)
        else arrMap.set(array[i], arrMap.get(array[i]) + 1)
        if(arrMap.get(array[i]) > max) max += 1
    }
    
    const findKey = getKeyByValue(arrMap, max)
    
    return findKey.length == 1 ? findKey[0] : -1
}
  1. array가 빈 배열이거나 요소가 하나뿐인 경우를 먼저 체크해줌.
  2. 그리고 Map 객체랑 빈도수를 체크할 max 변수를 준비.
  3. for문을 돌면서 array 요소와 그 개수를 key- value로 묶어서 만들어줌.
  4. if문을 통해 value와 max를 비교해서 카운트해줌.
  5. max를 value로 가지고 있는 key값을 배열로 리턴해주는 함수를 사용해서 key 배열을 가져옴.
  6. 최빈값이 하나라면 리턴한 배열 길이가 1일 것이므로 [0]을 리턴하고 아닐 경우 -1을 리턴.










✔문제출처: 프로그래머스

post-custom-banner

0개의 댓글