Problem From.
https://leetcode.com/problems/minimize-maximum-of-array/
오늘 문제는 리스트가 주어졌을때, 그 리스트에서 특정인덱스에 1을 더하고 그 전 인덱스에서 1을 빼는 규칙이 있을때, 리스트의 원소를 최대값으로 만든 뒤, 그 최대값을 반환하는 문제였다.
먼저 규칙을 찾으면, 특정인덱스에서 1을 빼고 그 전 인덱스에서 1을 더하면, 총 합은 변하지 않는다. 결국 모든 수의 평균을 구하는게 이 문제의 최대값을 구할 수 있는 방법이 된다.
그러므로 리스트를 처음부터 끝까지 순회하면서, 각각의 단계에서 평균을 구해나가면 답을 얻을 수 있었다. 여기서 주의할점은 평균을 구할때, 평균의 천장값을 구해야한다는 점이었다.
class Solution {
fun minimizeArrayValue(nums: IntArray): Int {
var sum = 0L
var answer = 0L
for(i in nums.indices) {
sum += nums[i].toLong()
answer = Math.max(answer, (sum + i) / (i + 1))
}
return answer.toInt()
}
}