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 |