Level 0 ) 최빈값 구하기 ⭐️

Doozuu·2022년 12월 27일
0

프로그래머스 (JS)

목록 보기
4/183

오답

function solution(array) {    
    let obj = {};
    let answer = [];
    
    array.forEach((n) => obj[n] = ++obj[n] || 1);
    
    for(let key in obj){
        answer.push([key, obj[key]]);
    }
    
    answer.sort((a,b) => b[1] - a[1]);
    
    if(array.length === 1) {
        return array[0];
    }else if(answer[0][1] === answer[1][1]){
        return -1;
    }else{
        return Number(answer[0][0]);
    }

}

이유 : 케이스 다 고려하지 못해서 틀림.

오류 케이스 : [1,1]

answer = [[1,1]] 이 되어 answer[0][1]이 존재하지 않으므로 오류가 난다.


정답

ex) array = [1,3,2,2]

function solution(array) {    
   let map = new Map();
    
  // map 초기화 : { 0=>0, 1=>0, 2=>0, 3=>0 }
    for(let i = 0; i <= Math.max(...array); i++){
        map.set(i,0);
    }
  // 갯수를 세어줌 : { 0=>0, 1=>1, 2=>2, 3=>1 }  
  // key를 조회해서 해당 value에 1을 더해준다.
    for(let i = 0; i < array.length; i++){
        map.set(array[i], map.get(array[i]) + 1);
    }
    
  // map의 value만 array에 따로 저장한다.
  // arr = [0,1,2,1]
    let arr = Array.from(map.values());
    
  // value의 최댓값을 구한다.
  // max = 2
    let max = Math.max(...arr);
    
  // 최댓값이 중복되면 -1을 return하고, 아니면 index를 반환한다.
  // 2
    if(arr.indexOf(max) !== arr.lastIndexOf(max)){
        return -1;
    }else{
        return arr.indexOf(max);
    }
}

⭐️ Map 객체

  • key가 있다는 점에서 object와 유사하지만 key에 다양한 자료형을 허용한다는 점에서 차이가 있다.
  • { key => value } 형태로 저장된다.

Map 만들기 : new Map( )

set

: key와 value를 저장한다.
map.set(key, value)

get

: 해당 key의 value를 조회한다.
map.get(key)


이외에도 has, delete, clear, size가 있다.
자세한 내용은 아래 링크 참조)
https://ko.javascript.info/map-set

  • 참고 : 값이 전부 다 다르면 최빈값은 없다.
    ex) 1,2,3,4
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글