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

MinJae·2024년 10월 7일
0

코딩테스트

목록 보기
1/3
post-custom-banner

LV0에 있길래 과감하게 덤볐다가 나의 부족함을 느끼게 해준 최빈값 구하기..

프로그래머스_최빈값 구하기 풀이 기록을 위해 포스팅합니다..도움을 주신 a.k.a 감자전, 운도님 감사합니다,,

문제 설명

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

입출력 예

arrayresult
[1,2,3,3,3,4]3
[1,1,2,2]-1
[1]1

풀이

1.

function solution(array) {
    let m = new Map();
    for(let n of array) {
        m.set(n, (m.get(n) || 0)+1);
    }
    m = [...m].sort((a,b)=>b[1]-a[1]);
    return m.length === 1 || m[0][1]>m[1][1] ? m[0][0] : -1;
}
  • Map을 사용하여 새로운 객체를 생성합니다.
let m = new Map();
  • for ~ of로 배열을 순회하면서 각 요소의 빈도를 계산합니다. 이미 Map에 존재하면 그 값을 가져오고, 없으면 0을 기본값으로 사용합니다.
for(let n of array) {
    m.set(n, (m.get(n) || 0)+1);
}
  • 객체 m을 배열로 변환하고 value인 빈도수를 기준으로 내림차순으로 정렬합니다.
m = [...m].sort((a,b)=>b[1]-a[1]);
  • 정렬된 배열 m의 길이가 1인 경우는 그 요소를 반환하고 가장 많이 등장하는 요소의 빈도가 두 번째로 많이 등장하는 요소의 빈도보다 큰 경우는 가장 많이 등장하는 경우의 빈도를 반환합니다. 가장 많이 등장하는 요소가 동률인 경우는 -1을 반환합니다.

2.

function solution(array) {
    let obj = {};
    for (let ele of array) {
        if (!obj.hasOwnProperty(ele)) { 
            obj[ele] = 1; 
        } else {
            obj[ele]++;   
        }
    }

    let maxCount = 0;
    let answer = [];

    for (let prop in obj) {
        if (obj[prop] > maxCount) {
            maxCount = obj[prop];  
            answer = [Number(prop)]; 

        } else if (obj[prop] === maxCount) {
            answer.push(Number(prop)); 
        }
    }

    if (answer.length > 1) {
        return -1;
    }

    return answer[0];  
}
  • 배열의 각 요소와 빈도수를 저장할 빈 객체를 생성합니다.
let obj = {};
  • 배열을 순회하면서 각 요소의 빈도를 계산합니다. hasOwnProperty 메서드를 사용하여 객체에 요소가 존재하지 않으면 1로 초기화, 존재하면 빈도를 1증가시킵니다.
for (let ele of array) {
    if (!obj.hasOwnProperty(ele)) { 
        obj[ele] = 1; 
    } else {
        obj[ele]++;   
    }
}
  • 최대 빈도수를 추적할 maxCount와 최대 빈도수를 가진 요소들을 저장할 배열 answer을 생성합니다.
let maxCount = 0;
let answer = [];
  • 객체 obj를 순회하면서 객체 obj의 프로퍼티 값이 maxCount보다 크면 maxCount를 갱신하고 answer를 해당 요소로 초기화합니다. 객체 obj의 프로퍼티 값이 maxCount와 동일하면 answer 배열에 추가합니다.
for (let prop in obj) {
    if (obj[prop] > maxCount) {
        maxCount = obj[prop];  
        answer = [Number(prop)]; 
    } else if (obj[prop] === maxCount) {
        answer.push(Number(prop)); 
    }
}
  • answer의 길이가 1보다 크면 -1을 반환하고 그렇지 않으면 answer[0]을 반환합니다.
if (answer.length > 1) return -1;
return answer[0];  

다시한번 Thanks to 감자전, 운도님🙇🏻🙇🏻🙇🏻

profile
반갑습니다
post-custom-banner

0개의 댓글