최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미한다. 정수 배열 array
가 매개변수로 주어질 때,
최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 한다.
array | result |
---|---|
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2 | -1 |
[1] | 1 |
function solution(array) {
// 배열에 요소
let obj = {};
// for문 반복하면서 obj에 현재 숫자와 같은 프로퍼티가 없으면 0 + 1을
// 있을 경우 obj[arrayElement+''] + 1을 한다.
for (const arrayElement of array) {
obj[arrayElement + ''] = (obj[arrayElement + ''] || 0) + 1;
}
let arr = Object.values(obj);
let maxValue = Math.max(...arr);
arr.splice(arr.indexOf(maxValue), 1);
maxValue = (arr.includes(maxValue)) ? -1 : maxValue;
return maxValue;
}
// 배열에 요소
let obj = {};
// for문 반복하면서 obj에 현재 숫자와 같은 프로퍼티가 없으면 0 + 1을
// 있을 경우 obj[arrayElement+''] + 1을 한다.
for (const arrayElement of array) {
obj[arrayElement + ''] = (obj[arrayElement + ''] || 0) + 1;
}
for ... of
문법을 사용하여 반복해서 값을 꺼내온다.obj[arrayElement + '']
를 통해 obj
에 프로퍼티가 없다면 프로퍼티를 생성한다.(obj[arrayElement + ''] || 0) + 1
는 obj
에 프로퍼티가 있다면 그 프로퍼티의 value에 +1을 하고 없으면 0에 +1을 한다. let arr = Object.values(obj);
let maxValue = Math.max(...arr);
let arr = Object.values(obj);
는 obj
에 담긴 value를 Object.values()
메서드를 통해 obj
의 value
값만 있는 배열로 return 받는다.let maxValue = Math.max(...arr);
Math.max()
메서드에 obj
의 value만 갖는 배열을 스프레드 문법을 이용해 인수를 전달하면arr.splice(arr.indexOf(maxValue), 1);
maxValue = (arr.includes(maxValue)) ? -1 : maxValue;
arr.splice(arr.indexOf(maxValue), 1);
2번에서 생성한 arr에 찾은 max값을 Array.prototype.indexOf
메서드를 사용해 찾고 Array.prototype.splice
를 사용해 삭제한다.maxValue = (arr.includes(maxValue)) ? -1 : maxValue;
Array.prototype.includes
를 사용해 max값이 더 있는지 확인하고 있으면 -1을 아니면 max값을 maxValue
에 담는다.maxValue
를 결과값으로 return한다.const solution = (array) => {
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];
}
문제를 풀고 후기
최종 합격은 하지 못했다.
다른 사람의 문제풀이를 보니 아직 배열의 메서드 이해가 부족하고 모르는게 많았다.
우선 자료구조들의 수많은 메서드를 공부를 하고 위의 문제를 다시 풀어보면 좋을거같다.
다른 사람의 문제 풀이 보고 느낀점
위 문제 풀이를 아직 다 이해하지 못했다.
reduce
메서드를 아직 공부 전이고map
메서드와sort
메서드를 사용한 것을 볼 수 있다.
지금의 나의 실력은 아직 위 메서드를 쓸 생각을 못했다.
다른 이들이 풀이한 것을 자주 보는것도 많은 자극과 도움이 되는거같다.
일단 딥 다이브 책부터 펴자...