Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트로 배열 속 양수, 음수, 0의 비율 구하기


문제 개요

다음과 같이 양수, 음수, 0이 섞여 있는 정수 배열이 있다고 가정해 보겠습니다.

const arr = [23, -1, 0, 11, 18];

우리가 작성해야 할 것은 이러한 배열을 첫 번째이자 유일한 인수로 받는 자바스크립트 함수입니다. 함수는 배열 안의 숫자들을 양수, 음수, 0의 세 그룹으로 나누고, 각 그룹이 전체에서 차지하는 비율을 소수 형태로 계산해 반환해야 합니다.

예를 들어 위 배열의 길이는 5이므로, 이 배열에 대한 결과는 다음과 같습니다.

const output = [0.2, 0.2, 0.6];

출력 배열에는 항상 3개의 숫자가 들어가며, 순서대로 음수, 0, 양수 정수의 비율을 나타냅니다. 결과를 검증하는 간단한 방법은 세 값을 모두 더했을 때 1에 가까워지는지 확인하는 것입니다. 합이 1에 가깝다면 로직이 올바르게 동작하고 있을 가능성이 높습니다.

구현 방법

이 문제를 해결하는 코드는 다음과 같습니다.

const arr = [23, -1, 0, 11, 18];
const findRatio = (arr = []) => {
    const { length } = arr;
    const res = [0, 0, 0];
    for(let i = 0; i < arr.length; i++){
        const el = arr[i];
        const key = el / Math.abs(el || 1);
        res[key + 1]++;
    };
    return res.map(el => el / length);
};
console.log(findRatio(arr));

코드 동작 원리

  • el / Math.abs(el || 1): 요소가 양수면 1, 음수면 -1, 0이면 0을 반환합니다. 여기서 el || 1은 요소가 0일 때 0으로 나누는 오류를 방지하기 위한 장치입니다.
  • res[key + 1]++: 계산된 값(-1, 0, 1)에 1을 더해 배열 인덱스(0, 1, 2)로 변환한 뒤, 해당 그룹의 카운트를 하나씩 증가시킵니다.
  • res.map(el => el / length): 마지막으로 각 그룹의 개수를 배열 전체 길이로 나누어 소수 비율로 변환합니다.

실행 결과

코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

[0.2, 0.2, 0.6]