FrontEnd :-)

programmers 최빈값 구하기 본문

JavaScript/Algorithm

programmers 최빈값 구하기

code10 2023. 3. 11. 17:45

최빈값 구하기

🙋 (문제)

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


제한사항
  • 0 < array의 길이 < 100
  • 0 ≤ array의 원소 < 1000

입출력 예arrayresult
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

🅰️ (제출 답) 

function solution(array) {
    if(array.length === 1) return array[0];
    let obj = {};
    for(let i = 0; i < array.length; i++){
        obj[array[i]] = 0;
        for(let j = 0; j < array.length; j++){
            if(array[i] === array[j]){
                obj[array[i]] += 1;
            }
        }
    }
    const max = Object.values(obj).sort((a, b) => b - a)
    return (max[0] === max[1]) ? -1 : +Object.keys(obj).find(key => obj[key] === max[0]);
}

 

✅ (풀이 과정)

1번째 실패

1. array 에 값이 하나일 때는, 그 값을 return한다.

2. 객체를 만든다. key에는 값을, value에는 중복 횟수를 저장한다.

3. 객체 value값을 내림차순 정렬해서 첫 번째 값과 두 번째 값이 같으면 -1 반환하고, 아니면 첫 번째 값을 반환(이 아니고, 그 값의 key값을 반환해줘야 함)

function solution(array) {
    if(array.length === 1) return array[0];
    let obj = {};
    for(let i = 0; i < array.length; i++){
        obj[array[i]] = 0;
        for(let j=1; j < array.length -1; j++){
            if(array[i] === array[j]){
                obj[array[i]] += 1;
            }
        }
    }
    const max = Object.values(obj).sort((a, b) => b - a);
    return (max[0] === max[1]) ? -1 : max[0];
}

=> 마지막 return 할 때 , max[0]가 아닌 그것의 key값을 return 해줘야 함.

function solution(array) {
    (위와 동일)
    return (max[0] === max[1]) ? -1 : +Object.keys(obj).find(key => obj[key] === max[0]);
}

2번째 실패

=> 16개의 테스트 중 하나가 통과를 못한다.

=> 두 번째 for 문에서 let j=0; j< array.length; j++ 로 변경하였다.


 

🤼‍♀️  다른 풀이 1

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;

 

 

🤼‍♀️  다른 풀이 2

    const counter = array.reduce((acc, cur) => ({
        ...acc,
        [cur]: (acc[cur] || 0) + 1
    }), {})

    const items = Object.keys(counter).map((key) => [
        Number(key), counter[key]
    ]).sort((a, b) => b[1] - a[1])

    if (items[0][1] === items?.[1]?.[1]) {
        return -1
    }

    return items[0][0];

 

'JavaScript > Algorithm' 카테고리의 다른 글

2. 배열과 오브젝트의 성능 평가  (0) 2023.03.13
1. Big O Notation(표기법)  (0) 2023.03.12
programmers 개미 군단  (0) 2023.03.10
programmers 피자 나눠 먹기 (2)  (0) 2023.03.09
programmers 대문자와 소문자  (0) 2023.03.09
Comments