Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 바나나 문제 배포하기

<시간/>

문제

n명의 사람들이 줄을 서 있다고 가정하고 바나나를 다음과 같은 방식으로 사람들에게 분배하고자 합니다. -

  • 첫 번째 사람에게 바나나 1개, 두 번째 사람에게 바나나 2개를 주는 식으로 마지막 사람에게 n개의 바나나를 줄 때까지 계속됩니다.

  • 그런 다음 행의 시작 부분으로 돌아가서 첫 번째 사람에게 n+1개의 바나나를, 두 번째 사람에게 n+2개의 바나나를 주는 식으로 마지막 사람에게 2 * n개의 바나나를 줄 때까지 계속됩니다.

  • 이 과정은 사탕이 다 떨어질 때까지 반복됩니다(매번 바나나를 하나 더 주고 끝에 도달한 후 행의 시작 부분으로 이동). 마지막 사람은 남은 바나나를 모두 받게 됩니다.

첫 번째 인수로 사람 수 num을, 두 번째 인수로 바나나 수 m을 취하는 JavaScript 함수를 작성해야 합니다.

우리 함수는 바나나의 최종 분포를 나타내는 배열(길이 num sum m)을 반환해야 합니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const num = 3;
const m = 10;

그러면 출력은 다음과 같아야 합니다. -

const output = [5, 2, 3];

출력 설명:

첫 번째 턴에서 res[0] +=1이고 배열은 [1,0,0]입니다.

두 번째 턴에서 res[1] +=2이고 배열은 [1,2,0]입니다.

세 번째 턴에서 res[2] +=3이고 배열은 [1,2,3]입니다.

네 번째 턴에서 res[0] +=4이고 최종 배열은 [5,2,3]입니다.

예시

이에 대한 코드는 -

const num = 3;
const m = 10;
const distributeBananas = (num = 1, m = 1) => {
   const res = new Array(num).fill(0);
   let curr = 1;
   while(true){
      for(let i = 0; i < num; i++){
         if(m < curr){
            res[i] += m
            return res
         };
         res[i] += curr;
         m -= curr;
         curr++;
      };
   };
};
console.log(distributeBananas(num, m));

출력

콘솔의 출력은 -

[5, 2, 3]