ReducingDishes
Published at 2021-06-19
class Solution:
def maxSatisfaction(self, satisfaction: List[int]) -> int:
# 5,3,0,-1,-2,-3 일 때
# 처음에는 total = 5*1
# 그 다음으로 큰 수는 3인데 3이 0번에 추가되면
# 5의 계수는 2가 되고 3은 새로 1로 추가되니까
# total = (5*1) 에 (3*1)+(5*1)이 됨 //(3*1)->추가된거 (5*1)->한칸씩 밀릴거
# 계수의 리스트가 늘어날 때마다
# 이전 총 합 + 새로 0번 인덱스에 추가될 값 + 한칸씩 뒤로 밀릴 숫자들 합계(계수1씩만)
# 방금 추가된 값은 다음번 한칸씩 밀릴 합계(tempTotal)에 포함시켜야함
result = [] #합계 결과들 저장
total = 0 #전체 총 합
tempTotal = 0 #한 칸 밀릴 숫자들 합
satisfaction.sort(reverse=True)
if satisfaction[0] < 0:
return 0
for num in satisfaction:
tempTotal = tempTotal + num
if total==0:
total = num
else:
total = total + tempTotal
result.append(total)
return max(result) /**
* @param {number[]} satisfaction
* @return {number}
*/
var maxSatisfaction = function(satisfaction) {
satisfaction.sort((a,b)=>b-a);
const sats = [satisfaction[0]];
let total = satisfaction[0]; // 접시 만족도 각각. 한칸이동할때마다 한번씩 더 더해줄거
for(let i=1; i<satisfaction.length; i++){
total += satisfaction[i];
sats.push( sats[i-1] + total); // 이전 합계에 현재접시더해서 그걸 이전의 합계랑 합해줌
}
return Math.max(...sats)<0?0:Math.max(...sats);
};