Back to all solutions

#1402 - Reducing Dishes

Problem Description

A chef has collected data on the satisfaction level of his n dishes.

Chef can cook any dish in 1 unit of time.

Like-time coefficient of a dish is defined as the time taken to cook that dish including previous dishes multiplied by its satisfaction level i.e. time[i] * satisfaction[i].

Return the maximum sum of like-time coefficient that the chef can obtain after dishes preparation.

Dishes can be prepared in any order and the chef can discard some dishes to get this maximum value.

Solution

/**
 * @param {number[]} satisfaction
 * @return {number}
 */
var maxSatisfaction = function(satisfaction) {
  let max = 0;

  satisfaction.sort((a, b) => a - b);

  while (satisfaction.length) {
    max = Math.max(
      max,
      satisfaction.reduce((total, n, i) => total + n * (i + 1), 0)
    );
    satisfaction.shift();
  }

  return max;
};