ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [codility] Time Complexity - TapeEquilibrium
    Algorithm 2021. 9. 23. 00:48

    문제

    A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.

    Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].

    The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|

    In other words, it is the absolute difference between the sum of the first part and the sum of the second part.

    For example, consider array A such that:

    A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3

    We can split this tape in four places:

    • P = 1, difference = |3 − 10| = 7
    • P = 2, difference = |4 − 9| = 5
    • P = 3, difference = |6 − 7| = 1
    • P = 4, difference = |10 − 3| = 7

    Write a function:

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

    that, given a non-empty array A of N integers, returns the minimal difference that can be achieved.

    For example, given:

    A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3

    the function should return 1, as explained above.

    Write an efficient algorithm for the following assumptions:

    • N is an integer within the range [2..100,000];
    • each element of array A is an integer within the range [−1,000..1,000].Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

     

     

    문제 해설

     

     

    구현 해설

     

    import Foundation
    import Glibc
    
    // you can write to stdout for debugging purposes, e.g.
    // print("this is a debug message")
    
    public func solution(_ A : inout [Int]) -> Int {
        // write your code in Swift 4.2.1 (Linux)
        //[3, 1, 2, 4, 3]
        
        let total = A.reduce(0, {$0+$1})
        var P = 0
        var arr: [Int] = []
        for (index, _) in A.enumerated() {
            
            if index == A.count-1 { break }
            
            P += A[index]
            
            let diff = abs(P - (total - P))
            arr.append(diff)
        }
        arr.sort()
        return arr[0]
    }

    댓글

Designed by Tistory.