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

JavaScript에서 배열을 동일한 합계로 n개의 파티션으로 나눌 수 있습니까?

<시간/>

숫자 배열 arr을 첫 번째 인수로, 숫자 num을 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다.

함수는 모든 그룹이 동일한 합을 갖도록 배열 arr의 요소를 num 그룹으로 배포하는 방법이 있는지 여부를 결정해야 합니다. 그러한 방식이 존재한다면 우리의 함수는 true를 반환해야 하고 그렇지 않으면 false를 반환해야 합니다.

예를 들어 -

입력 배열과 숫자가 -

인 경우
상수 arr =[4, 6, 3, 3, 7, 4, 1]; 상수 num =4;

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

상수 출력 =true;

네 그룹이 [7], [1, 6], [4, 3], [4, 3]

이기 때문입니다.

예시

이에 대한 코드는 -

const arr =[4, 6, 3, 3, 7, 4, 1]; const num =4; const canDivide =(arr =[], num =1) => { const sum =arr.reduce( (acc, num) => acc + num); if (sum % num !==0 || arr.some(num => num> sum / num)) { return false; } const 사용 =new Set(); return (function find(start, target) { if (used.size ===arr.length) { return true; } if (target <0) { return false; } if (target ===0) { return find( 0, 합계/숫자); } for (let i =start; i  

솔루션에서 취한 단계는 −

  • 1단계. 총합을 num으로 나눌 수 없거나 숫자 중 하나가 sum/num보다 크면 false를 반환합니다.

  • 2단계. 사용된 숫자를 추적하기 위해 HashSet을 사용했습니다.

  • 3단계. 하위 파티션을 찾기 시작했습니다.

  • 모든 숫자가 사용되면 완료됩니다.

  • 부분집합 합계가 너무 크면 검색을 중단했습니다.

  • 하나의 하위 집합을 찾은 경우 모든 숫자를 사용할 때까지 검색을 계속했습니다.

  • 그리고 마지막으로 사용하지 않은 모든 번호를 시도했습니다.

출력

콘솔의 출력은 -

사실