문제
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]