JavaScript 중앙값, 최빈값 알고리즘

sikkzz·2023년 7월 1일

알고리즘

목록 보기
2/2
post-thumbnail

중앙값 구하기 (programmers)

문제설명

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 
예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 
정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

매개변수로 들어오는 배열을 오름차순으로 정렬한 뒤 배열의 중간에 있는 값을 return해주면 구할 수 있습니다. 정렬에는 JavaScript 함수인 sort()를 사용했습니다.

📝  코드

function solution(array){
    return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]
}

array.sort() 함수

배열을 정렬하는 JavaScript 함수입니다.

array.sort([compareFuction])

파라미터
compareFunction

정렬 순서를 정의하는 함수입니다.
이 값이 생략되면 배열의 element들은 문자열로 취급되며 유니코드 값 순서대로 정렬됩니다.
두 개의 배열 element를 파라미터로 입력받을 수 있습니다.
a, b 두개의 element를 파라미터로 입력받을 경우

  • 리턴값이 0보다 작으면 a가 b보다 앞에 오도록 정렬
  • 리턴값이 0보다 크면 b가 a보다 앞에 오도록 정렬
  • 리턴값이 0이라면 순서를 변경하지 않습니다.

리턴값
compareFunction의 규칙에 따라 정렬된 배열을 리턴합니다.
이때, 원본 배열이 정렬되고, 리턴하는 값 또한 원본 배열을 가리키게 됩니다.
원본 배열이 변경되지 않으려면 toSorted()함수를 사용해야 합니다.

최빈값 구하기 (programmers)

문제설명

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 
최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

map객체를 통해 주어진 배열에서 해당 인덱스를 키값으로 인덱스의 빈도를 데이터값으로 설정하여 빈도가 가장 큰 값을 리턴하는 식으로 구할 수 있었습니다.

📝  코드

function solution(array) {
  let counting = new Map();
  let countArray = new Array();
  let max = 0;

  for (let i of array) {
    // key값에 데이터가 없으면 0으로 설정
    // map에 키값은 해당 인덱스, 데이터는 빈도(갯수) 설정
    // max를 통해 빈도 체크
    if (!counting.has(i)) counting.set(i, 0); 
    if (counting.has(i)) counting.set(i, counting.get(i) + 1); 
    while (counting.get(i) > max) max++;
  }

  for (let [k, v] of counting) {
    // 최대 빈도 값을 countArray에 할당
    if (v === max) countArray.push(k); 
  }
  
  // 배열의 길이가 1이면 최빈값이 1개이므로 최빈값 리턴 여러개면 -1 리턴
  return countArray.length === 1 ? countArray[0] : -1; 
}

Map 객체

ES6부터 새롭게 도입된 개념으로 키와 값을 연결하는 데이터 유형이다.

  • 기존 객체와 달리 다양한 타입, 심지어 객체로도 키 설정이 가능하다.
  • 객체와 달리 자료를 반복할 수 있어 for-of나 스프레드 연산자 사용이 가능하다.
  • 배열처럼 삽입된 순서나 크기를 구하기 쉽다.
  • 실행 시까지 키를 알 수 없고, 모든 키와 값들이 동일한 type일 경우 사용을 추천한다.

메서드
new Map() : 일반 생성자 함수와 같이 변수처럼 사용이 가능하다.
map.set(key, value) : 객체와 비슷하게 키와 값을 한 번에 선언할 수 있고 체이닝도 가능하다.
map.get(key) : 객체와 비슷하게 인자에 키를 넣어 값이나 undefined를 반환한다.
map.has(key) : 데이터 존재 유무를 boolean 값으로 반환한다.
map.delete(key) : 키로 값을 제거한다.
map.clear() : 모든 데이터를 삭제한다.
map.size : 데이터 갯수를 반환한다.
map.keys() : iterable 키에 대해 반복 가능한 값을 반환한다.
map.values() : iterable 값에 대해 반복 가능한 값을 반환한다.
map.entries() : iterable 객체로 반환되며 각 값은 [key, value] 형태이다.
map.next() : entries 메서드로 반환된 iterable 객체 뒤에 활용되며 순차적으로 value, done property를 제공한다.

참조

profile
FE Developer

0개의 댓글