본문 바로가기

programmers/level 0

Programmers - Js - 최빈값 구하기

문제 설명

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

제한 사항

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

 

입출력 예

입출력 예 #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(arr) {
    // 입력값 arr에서 중복값을 제거
    let deleteDupArr = [...new Set(arr)];
    // arr의 각 요소가 몇개 있는지 담을 배열
    let answer = new Array(deleteDupArr.length).fill(0);
    // arr에 요소개 1개일경우 최빈값음 그 1개이기 때문에 리턴
    if(answer.length === 1) return arr[0];
    // arr배열을 순회하며 중복을 제거한 deleteDupArr의 요소개 arr에 몇개씩 있나 확인 후 answer에 저장
    for(let i=0; i<deleteDupArr.length; i++) {
        for(let j=0; j<arr.length; j++) {
            if(deleteDupArr[i] === arr[j]) answer[i]++;
        }
    }
    // 최빈값이 가장 높은 수가 여러개일경우 ex) [1, 1, 2, 2, 3] -1 리턴
    const a = answer.filter((item) => item === Math.max(...answer))
    if(a.length > 1 ) return -1
    // 최빈값이 가장 높은 index를 찾아 deleteDupArr에서 해당 인덱스를 반환
    const maxIndex = answer.findIndex((item) => item === Math.max(...answer))   
    return deleteDupArr[maxIndex];
}

'programmers > level 0' 카테고리의 다른 글

Programmers - Js - 분수의 덧셈  (0) 2023.03.28
Programmers - Js - OX퀴즈  (0) 2023.03.24
Programmers - Js - 다항식 더하기  (0) 2023.03.23
Programmers - Js - 문자열 밀기  (0) 2023.03.23
Programmers - Js - 저주의 숫자 3  (0) 2023.03.23