Reducing Dishes
개요
- 이번 포스팅은 파이썬 코딩테스트 연습문제 풀이입니다.
Leetcode
에 공개된 예제이며 링크는 아래와 같습니다.
코드
def maxSatisfaction(self, satisfaction: List[int]) -> int:
# 우선 satisfaction을 sorted
satisfactions = sorted(satisfaction)
max_score = 0
# satiscations가 없을때까지 반복, 시간복잡도는 O(n2)
while satisfactions:
# satisfaction에서 하나씩 빼오면서 score 계산
time = 1
score = 0
for like in satisfactions:
score += (time * like)
time += 1
# score 가 가장 큰 값인지 확인
if max_score < score:
max_score = score
# 맨 처음, 그러니까 가장 점수가 작은 값을 빼고 다시한번 score계산
satisfactions.pop(0)
return max_score
마치며
이번 포스팅은 Leetcode
에 존재하는Greedy
알고리즘 중 난이도 Hard 에 해당하는 문제입니다.