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

재오·2023년 3월 26일
2

코딩테스트

목록 보기
15/46
post-thumbnail

🗒️ 문제

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

⚠ 제한사항

0 < array의 길이 < 100
0 <= array의 원소 < 1000

📝 문제 해설

이 문제 역시 자바스크립트 최빈값 알고리즘을 이용해야 한다. 이 문제를 풀기 위해서 Map 객체를 사용해야 한다. 우선 배열에서 가장 큰수를 찾고 그 수만큼의 반복문을 돌리면서 Map 객체를 초기화하는 과정을 거친다. 그리고 배열에 있는 숫자를 Map 객체의 인덱스로 잡고 get함수를 이용하여 찾을 때마다 1씩 증가해준다. 그리고 Array.from()을 사용하여 value값만 얻는 새로운 얕은복사한 배열을 만들어준다. 이후에 가장 큰 수를 얕은 복사를 한 배열에서 찾아서 그 수가 중복이면 -1을 return 해주고 아니면 그 수를 return 해준다.

💡 필요 문법

new Map() 객체

map을 객체로 만들어줘서 수정 삭제가 용이하게 해준다.

Array.from()

기존 배열을 변경하지 않고 새로운 얕은 복사를 한 배열을 만들어준다.

indexOf()

앞에서 순서대로 원하는 값을 찾고 index 값을 얻게 해준다.

lastIndexOf()

뒤에서 순서대로 원하는 값을 찾고 index 값을 얻게 해준다. 하지만 index는 앞에서 순서대로 얻은 값이다.

💻 코드

function solution(array) {
    let map = new Map();
    
    for(let i=0; i<=Math.max(...array); i++){
        map.set(i,0);
    }
    
    for(let i=0; i<array.length; i++){
        map.set(array[i], map.get(array[i]) + 1);
    }
    
    let arr = Array.from(map.values());
    
    let max = Math.max(...arr);
    
    if(arr.indexOf(max) !== arr.lastIndexOf(max)){
        return -1;
    } else{
        return arr.indexOf(max);
    }
}
profile
블로그 이전했습니다

0개의 댓글