- Date : 2021.09.26(일)
- Time : 20분
- Given an integer array nums of size n, return the minimum number of moves required to make all array elements equal. In one move, you can increment n - 1 elements of the array by 1.
- n == nums.length
- 1 <= nums.length <= 10^5
- -10^9 <= nums[i] <= 10^9 The answer is guaranteed to fit in a 32-bit integer.
- Input: nums = [1,2,3]
- Output: 3
- Explanation: Only three moves are needed (remember each move increments two elements):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
def minMoves(self, nums: List[int]) -> int:
num_min = sys.maxsize
sum = 0
for i in nums:
if i<num_min: num_min = i
sum += i
return sum - num_min*len(nums)
: 이 문제는 n-1개의 요소를 +1씩 시켜서 모든 배열이 같은 숫자를 가지게 만드는 문제이다. sys.maxsize
는 int의 최대값을 넣어준다. for 문으로 배열을 돌면서 만약에 배열의 값이 더 작다면 최소값으로 업데이트 해준다. 그리고 sum에 현재 값을 더해준다. 결국 sum은 모든 배열 요소의 합이 되는것이다. 이 배열의 전체합에서 최소값과 배열의 길이를 곱한 값을 빼주면 된다. 최소값이 전체 합을 따라가기 위해서 얼마의 차이가 필요한지의 해설로 푼 문제이다.