๐Ÿ“š Study/Baekjoon

[Codility] Lesson3 - Time Complexity | TapeEquilibrium

์œฐ๊ฐฑ 2026. 8. 1. 16:13

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

 


[ํ‹€๋ฆฐํ’€์ด]

import sys

def solution(A):
    # ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๊ทธ ์ฐจ์ด๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๊ณ„๋ฅผ ์ฐพ์•„๋ผ
    # RETURN: ๊ทธ ์ฐจ์ด๊ฐ’
    sum_all = sum(A)

    min_diff = sys.maxsize
    for i in range(len(A)):
        sum_1 = sum(A[:i+1])
        sum_2 = sum_all - sum_1
        diff = abs(sum_1-sum_2)
        if diff < min_diff: min_diff = diff
    
    return min_diff

sum ์ž์ฒด๋ฅผ ์ค‘๋ณตํ•ด์„œ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ณ ๋ ค ์•ˆํ•จ 

 

[๋งž๋Š” ํ’€์ด]

import sys

def solution(A):
    # ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๊ทธ ์ฐจ์ด๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๊ณ„๋ฅผ ์ฐพ์•„๋ผ
    # RETURN: ๊ทธ ์ฐจ์ด๊ฐ’
    sum_all = sum(A)

    min_diff = sys.maxsize
    sum_tmp = 0
    for i in range(len(A)-1):
        sum_1 = sum_tmp + A[i]
        sum_2 = sum_all - sum_1
        diff = abs(sum_1-sum_2)

        if diff < min_diff: min_diff = diff

        sum_tmp = sum_1
    
    return min_diff