[Swift] [50일차] 1551_LEET

·2025년 1월 26일
0

SwiftAlgorithm

목록 보기
53/105
post-thumbnail

1551. Minimum Operations to Make Array Equal


문제 설명

  1. 1부터 차례대로 올라가는 홀수 배열을 만들고 n길이만큼
  2. 모든 배열안의 값을 동일하게 만들어야함
  3. 그렇게 만들기 위해 한 원소에서 1빼고 다른 원소에 +1 해주는 횟수를 정답으로 제출

문제 접근

  1. 일단은 홀수로 짜여져 있으니까 길이가 홀 수면 가운데 원소에 맞추면되고,
  2. 짝수면 가운데 값 2개의 중간값을 구하면되는것인데,
  3. 굳이 길이 비교 안해주고도 그냥 각 양끝에 있는친구 (a[0]+a[n-1]/2) - a[0] 하면 될 듯 ?
  4. 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
    }
}

?

  1. 이게 중앙값은 항상 (2n-1)/2이고 그게 결국 배열의 길이다
  2. 홀수로된 등차수열이라고 생각하면 이제 S=(n/2)/2 + (1+(n-1)) 인거라서 그게 결국 n*n /4 가 되는 것이다.

왜 등차수열??

이게 n까지 가려면 첫항부터,, (n-1),(n-3),(n-5)하는 식으로 쭉 가기때문이다.

profile
기억보단 기록을

0개의 댓글