코딩 테스트 풀이 🛠

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

엄성준 2023. 2. 22. 15:04

문제 설명

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

 

제한사항

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

 

입출력 예

 

array result
[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) {
    
    const answer ={} // answer이라는 빈 객체를 생성하였습니다.
    
    for(let i=0; i<array.length; i++){ // 반복문을 통해서 array의 요소를 순회합니다.
        if(!answer[array[i]]){ // 만약 answer객체에 array[i] key로 값이 없다면
            answer[array[i]] =1 // answer 객체에 array[i]를 키 값으로 1을 지정해줍니다.
        }else{ // // 만약 answer객체에 array[i] key로 값이 존재한다면
            answer[array[i]]++ //1을 증가시켜줍니다.
        }
    }

    const max = []
    for(let key in answer){ // answer객체의 key값을 순회하면서
        max.push(answer[key]) // max배열에 answer[key]의 value값을 max에 넣어줍니다.
    }
    
    const maxNum = Math.max(...max) // 최빈값을 구해줍니다.
    
    const result = [];
    for(let key in answer){ // 다시 하번 answer배열의 key값을 순회하면서 만약 answer[key]의 값이 maxNum과 동일하다면 result 배열에 넣어줍니다.
        if(answer[key]===maxNum){
            result.push(key)
        }
    }
    
    if(result.length >1) return -1 // 만약 최빈값이 1개보다 많다면 -1을 return 해주고
    return Number(result[0]); // 하나라면 result배열의 0번째 값을 Number로 변환해 준 뒤 return 해줍니다.
}