코딩테스트/Programmers

최빈값 구하기 (JS)

동띵 2022. 12. 4. 14:14

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(array) {
    let answer = 0;
    let obj = {};
    
    array.map((num) => (
        obj[num] ? obj[num] += 1 : obj[num] = 1
    ))
    const valArr = Object.values(obj)
    const maxVal = Math.max(...valArr)
    const modeArr = Object.keys(obj).filter(e => obj[e] === maxVal);  
 
    answer = modeArr.length > 1 ? -1 : parseInt(modeArr[0]);
    return answer;
}

위 obj는 해당 숫자가 몇 번 등장하는지 체크하는 것이다.
map을 사용해 입력받은 배열을 돌면서 obj[num] 값이 있다면 그 값에 1을 더하고,
없다면 한 번도 등장하지 않은 것이므로 1을 주었다.


그러면 배열 속 숫자가 몇 번 등장했는지 알 수 있다.
ex) [1, 2, 3, 3, 3, 4]
-> {'1': 1, '2': 1, '3': 3, '4': 1}

그다음 Object.values를 통해 객체의 value만 뽑아 배열을 만들고,
Math.max 함수를 통해 value 값 중 최댓값을 구했다.

그리고 최빈값이 여러개인지 확인하기 위해 Object.keys로 객체의 key만 가져온 후
filter 메서드를 사용해 해당 key의 value 값이 maxVal과 같은 것들만 필터링해 배열로 만들어주었다.

modeArr의 길이가 1이면 최빈값이 하나이므로 0번째 인덱스를 answer에 넣어주었고,
1보다 크면 최빈값이 여러개이므로 answer에 -1을 넣어주었다.

'코딩테스트 > Programmers' 카테고리의 다른 글

튜플 (Python)  (0) 2023.06.01
진료순서 정하기 (JS)  (1) 2022.12.06
이진 변환 반복하기 (JS)  (0) 2022.09.13
올바른 괄호 (JS)  (0) 2022.09.13
JadenCase 문자열 만들기 (JS)  (1) 2022.09.12