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

JavaScript로 배열의 모든 요소를 동일하게 만드는 최소 연산 횟수 구하기

문제 개요

숫자 num을 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 먼저 다음 규칙에 따라 n개의 요소로 이루어진 배열을 생성합니다.

arr[i] = (2 * i) + 1;

예를 들어 입력 숫자가 5라면 생성되는 배열은 다음과 같습니다.

const arr = [1, 3, 5, 7, 9];

함수의 목표는 배열의 모든 요소를 동일한 값으로 만들기 위해 필요한 최소 연산 횟수를 계산하여 반환하는 것입니다.

연산(단계)의 정의

유효한 한 번의 연산은 다음과 같이 이루어집니다.

  • 배열에서 서로 다른 두 숫자를 선택합니다.
  • 첫 번째 숫자에는 1을 더하고, 두 번째 숫자에서는 1을 뺍니다.

따라서 위 배열에 대한 기대 출력은 다음과 같습니다.

const output = 6;

예제 코드

const num = 5;
const minimumOperations = (num = 1) => {
    if(num === 1){
        return 0;
    };
    let arr = new Array(num);
    let i = 0;
    let res = 0;
    while(i < num){
        arr[i] = (2 * i) + 1;
        if(arr[i] < num) res += num - arr[i];
        i++;
    };
    return res;
};
console.log(minimumOperations(num));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

6

코드 설명

이 풀이의 핵심은 목표 값이 배열의 평균, 즉 num이라는 점입니다. 홀수 수열 [1, 3, 5, ..., 2n-1]의 평균은 항상 n이므로, 모든 요소를 num 값으로 맞추는 것이 최적의 전략입니다.

각 연산은 한쪽 값을 1 증가시키고 다른 쪽 값을 1 감소시키는 방식이므로, num보다 작은 요소들을 num까지 끌어올리는 데 필요한 증가량의 합이 곧 최소 연산 횟수가 됩니다. 코드에서는 arr[i] < num인 경우 num - arr[i]를 결과값에 누적하는 방식으로 이를 계산합니다.

또한 입력이 1인 경우 배열에 요소가 하나뿐이므로 이미 모든 요소가 동일한 상태이며, 이때는 즉시 0을 반환합니다.