자바스크립트

[JavaScript] 프로그래머스 최빈값 구하기

코딩하는둥이 2023. 7. 11. 17:58
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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' ]