혹시나 잘못된 개념 전달이 있다면 댓글 부탁드립니다. 저의 성장의 도움이 됩니다.
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
A
하여 반복문으로 카운팅 B
로 추출(Object.keys(A)
)B
를 객체A
의 벨류값 기준으로 정렬 : B.sort((a,b)=>A[b]-A[a])
**
코드 대신 접근 방식을 익히고 고민해보기 힌트만 적었습니다.
위의 방법은 반복문으로 객체를 만들었지만, Map
객체를 사용하여 배열만드는 만드는 경우도 많았다.
MDN : 키기반의 컬렉션, MDN : Map
ES6에 추가된 데이터 구조 (Object 객체와 비교 됨)
key와 value를 맵핑하여 저장
-> [key, value]
형태로 반환
Object 혹은 Map중에 어느 것을 사용할지를 결정하는데 도움을 줄 두가지 팁이 있다:
- 실행 시까지 키를 알수 없고, 모든 키가 동일한 type이며 모든 값들이 동일한 type일 경우에는 objects를 대신해서 map을 사용해라.
- 각 개별 요소에 대해 적용해야 하는 로직이 있을 경우에는 objects를 사용해라.
Map 객체의 키는 문자열 타입 외에도 가능
Map 객체는 set
메서드로 추가한 순서로 반복
: 객체는 배열처럼 순서가 없지만 Map의 경우 반복문을 돌릴 때 추가한 순서대로 동작한다.
Map 객체는 size
메서드로 크기 추출
const capitalCity = new Map();
const capitalCity1 = new Map([['Korea', 'Seoul'],['USA', 'Washington']]);
/*----- key,value 쌍 추가 -----*/
capitalCity.set('Korea', 'Seoul');
capitalCity.set('USA', 'Washington');
// 체이닝 가능 :
// capitalCity.set('Korea', 'Seoul').set('USA', 'Washington');
// case 1
for(const el of capitalCity){
console.log("el :",el);
}
// case 2
for(const [key,value] of capitalCity){
console.log("key, value :",key, value);
}
// case 3
console.log("구조분해 :",[...capitalCity]);
/*----- key,value 쌍 개수 조회 -----*/
capitalCity.size; // 2
/*----- key로 조회 -----*/
capitalCity.get('Korea') // 'Seoul'
/*----- key,value 쌍 제거 -----*/
capitalCity.delete('USA');
capitalCity.size; // 1
/*----- key 있는지 확인 -----*/
capitalCity.has('France'); // false
/*----- 초기화 -----*/
capitalCity.clear();
console.log(capitalCity.size) // 0
forEach()
배열의 forEach와 전달인자가 다르다.
capitalCity.forEach((value, key, map)=>{
console.log(value, key, map)
});
function solution(array) {
const map = new Map();
array.forEach((el)=>{
map.set(el, (map.get(el)|| 0)+1);
})
const maxAlign = [...map].sort((a,b)=>b[1]-a[1]);
return (maxAlign.length ===1 || maxAlign[0][1]!==maxAlign[1][1])? maxAlign[0][0]: -1;
}