Apple /Algorithm

[Algorithm/Swift] Codility / TapeEquilibrium

moon_0 2022. 12. 23. 08:28

문제

https://app.codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/

풀이

equilibrium 이름처럼 균형을 찾는 문제입니다.

P라는 포인트 위치를 기준으로 왼쪽 배열의 함 우측 배열의합을 구한뒤 빼서 가장 작은 수를 구하는 문제입니다.

P 포인트 위치의 요소는 항상 우측에 포함됩니다.

약간 어려움..

Troubleshooting

  • 마지막 n-1이 중요

Tip

  • 빼기를 해줄때 -가 올 수 있기 때문에 abs()를 써서 해주면 됩니다.
    • abs() 

Code O(N)

public func solution(_ A : [Int]) -> Int {

    var sum_left = 0
    var sum_right = A.reduce(0, +)
    var result = 0
    
    for (index, element) in A.enumerated() {
        sum_left += element
        sum_right -= element
            
        let diff = abs(sum_left - sum_right)
        
        if index == 0 {
            result = diff
        } else if index == A.count - 1 {
            break
        } else {
            result = min(result, diff)
        }
    }
    
    return result
}