1551. Minimum Operations to Make Array Equal
문제 설명
- 1부터 차례대로 올라가는 홀수 배열을 만들고 n길이만큼
- 모든 배열안의 값을 동일하게 만들어야함
- 그렇게 만들기 위해 한 원소에서 1빼고 다른 원소에 +1 해주는 횟수를 정답으로 제출
문제 접근
- 일단은 홀수로 짜여져 있으니까 길이가 홀 수면 가운데 원소에 맞추면되고,
- 짝수면 가운데 값 2개의 중간값을 구하면되는것인데,
- 굳이 길이 비교 안해주고도 그냥 각 양끝에 있는친구
(a[0]+a[n-1]/2) - a[0]
하면 될 듯 ?- left,right만들어주고 양쪽에서 쪼아주면 될 것 같음 !
문제 풀이
일단 길이가 n
인 배열이면서 1,3,5,7.. 홀수 배열을 만들어줬다.
let arr = Array(0 ..< n).map {
$0 * 2 + 1
}
최종코드
class Solution {
func minOperations(_ n: Int) -> Int {
var count = 0
var left = 0
var right = n - 1
let arr = Array(0 ..< n).map {
$0 * 2 + 1
}
while left < right {
count += (arr[left] + arr[right]) / 2 - arr[left]
left += 1
right -= 1
}
return count
}
}
아까 언급한 것처럼 (arr[left] + arr[right]) / 2 - arr[left]
해주면서 양쪽에서 쪼여오는 방식을 해줬다.
이렇게 되면 길이가 홀수면 가운데는 안건들고, 길이가 짝수면 알아서 이게 잘 수행을 해주기 때문!
타인의 코드
class Solution { func minOperations(_ n: Int) -> Int { n * n / 4 } }
?
- 이게 중앙값은 항상
(2n-1)/2
이고 그게 결국 배열의 길이다- 홀수로된 등차수열이라고 생각하면 이제 S=(n/2)/2 + (1+(n-1)) 인거라서 그게 결국 n*n /4 가 되는 것이다.
왜 등차수열??
이게 n까지 가려면 첫항부터,, (n-1),(n-3),(n-5)하는 식으로 쭉 가기때문이다.