Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- ChatGPT
- ReactNative
- typeScript
- 7기
- 코린이
- 맥린이
- 스파르타코딩클럽
- Programmers
- D반8조
- TDD
- 챗GPT
- 달리기반
- 알고리즘기초주차
- rn
- 웹개발종합반
- 알pdf #파일탐색기미리보기안될때
- 리액트
- 실전프로젝트
- 멍친구
- NotionAI
- TS
- 프론트엔드
- REACT
- 항해99
- 사전준비
- Expo
- Ai
- 팀워크최고
- 필수강의
Archives
- Today
- Total
FrontEnd :-)
programmers 최빈값 구하기 본문
최빈값 구하기
🙋 (문제)
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 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