Programming/์ฝ”ํ…Œ

Codility - Lesson 3 - 3. TapeEquilibrium

Task Description

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:

 

  • def solution(A)

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].

Code

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

# ์ •๋‹ต๋ฅ  53%(๋‚˜๋จธ์ง€ timeout)

def solution(A):
    # write your code in Python 3.6

    temp_b = 0
    temp_c = 0
    temp = []

    for a in range(0, len(A) - 1):
    
        for b in range(0, a + 1):
            temp_b = temp_b + A[b]
            
        for c in range(len(A) - 1, a, -1):
            temp_c = temp_c + A[c]
            
        temp.insert(a, diffrence = abs(temp_b - temp_c))
        
    answer = min(temp)

    return answer

 

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

# ์ •๋‹ต๋ฅ  100%

def solution(A):
    # write your code in Python 3.6

    temp_b = 0
    temp_c = sum(A)
    temp = []

    for a in range(0, len(A) - 1):
        temp_b = temp_b + A[a]
        temp_c = temp_c - A[a]
        temp.insert(a, abs(temp_c - temp_b))
        
    answer = min(temp)

    return answer

 

'Programming > ์ฝ”ํ…Œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Codility - Lesson 4 - 2. MaxCounters  (0) 2021.01.07
Codility - Lesson 4 - 1. FrogRiverOne  (0) 2021.01.05
Codility - Lesson 3 - 2. PermMissingElem  (0) 2021.01.03
Codility - Lesson 3 - 1. FrogJump  (0) 2020.12.18
Codility - Lesson 2 - 1. CyclicRotation  (0) 2020.12.09