[JavaScript] 프로그래머스 최빈값 구하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
입출력 예
array | result |
[1,2,3,3,3,4] | 2 |
[1,1,2,2] | -1 |
[1] | 1 |
코드
const solution = (arr) => {
// 배열 내 각 요소의 빈도를 저장할 객체
let frequency = arr.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
// 가장 빈도가 높은 요소를 찾음
let mode;
let maxFrequency = 0;
let multipleModes = false;
Object.keys(frequency).forEach((key) => {
if (frequency[key] > maxFrequency) {
mode = Number(key);
maxFrequency = frequency[key];
multipleModes = false;
} else if (frequency[key] === maxFrequency) {
multipleModes = true;
}
});
return multipleModes ? -1 : mode;
}
첫 번째로 reduce 함수를 사용하여 배열 내 각 요소의 빈도를 저장할 객체를 구합니다.
두 번째로 forEach() 메서드를 사용하여 가장 높은 빈도를 갖는 요소를 찾습니다.
세 번째로 if문을 사용해 최빈값이 여러 개 있을 때와 없을 때를 조건을 다르게 줍니다.
마지막으로 삼항연산자를 사용해 최빈값이 여러 개일 때 -1를 반환하고, 그렇지 않은 경우에는 최진값인 mode를 반환합니다.
공부
reduce
: 배열의 각 요소에 대해 주어진 콜백 함수를 실행하고, 하나의 값을 누적하여 반환하는 배열 메서드
즉, 인수로 함수를 받는다
배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초깃값);
ex) 배열의 모든 수 합치기
let arr = [1,2,3,4,5];
const result = arr.reduce((prev, cur) => {
return prev + cur;
},0)
console.log(result);
ex) 성인만 불러오기
let userList= [
{name:"a", age: 20},
{name:"b", age: 10},
{name:"c", age: 30},
{name:"d", age: 40},
{name:"e", age: 19},
]
let result = userList((prev, cur) =>{
if(cur.age > 19){
prev.push(cur.name);
}
return prev;
},[]);
console.log(result);
forEach
: 다음 매개변수와 함꼐 배열의 각 요소에 적용할게 될 콜백함수를 전달합니다.
즉, 배열의 요소를 반복하며 함수를 호출합니다.
// currentValue - 배열의 값
// index (선택 사항) - 현재 항목의 인덱스
// arr (선택 사항) - 현재 항목의 배열
array.forEach((currentValue, index, arr) => {
});
배열 요소의 합 구하기
var numbers = [1, 2, 3, 4, 5];
var sum = 0;
numbers.forEach((number) => {
sum += number;
});
console.log("Sum:", sum); // 출력: Sum: 15
배열에서 특정 값을 가진 요소 찾기
var fruits = ["apple", "banana", "orange", "kiwi"];
var target = "orange";
var found = false;
fruits.forEach((fruit) => {
if (fruit === target) {
found = true;
}
});
console.log("Found:", found); // 출력: Found: true
Object.keys()
: JavaScript에서 내장된 메서드로, 객체의 속성 이름들을 배열로 반환하는 역할합니다.
이름들을 배열로 얻는 예시
var person = {
name: "John",
age: 30,
gender: "male"
};
var keys = Object.keys(person);
console.log(keys); // 출력: [ 'name', 'age', 'gender' ]