(codility with python) TapeEquilibrium
lesson3 - TapeEquilibrium
https://app.codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/
O(n^2)의 시간복잡도
list slice 후 sum()을 통해서 합계를 구하는 부분이 o(n^2)의 시간복잡도를 갖는다
def solution(A):
cand = []
for i in range(1, len(A)):
a_sum, p_sum = 0, 0
a_sum = sum(A[0:i])
p_sum = sum(A[i:])
cand.append(abs(a_sum - p_sum))
return min(cand)
주의할 점
- list slice를 사용하지 않는다
- A[i - 1]은 for문을 통해서 구한다
- A[P] ~ A[N - 1]은 sum(A)에서 A[i - 1]을 빼서 구한다
O(n)의 시간복잡도
def solution(A):
a_sum = 0
p_sum = sum(A)
m = None
for i in range(1, len(A)):
a_sum += A[i - 1]
p_sum -= A[i - 1]
diff = abs(a_sum - p_sum)
if m == None:
m = diff
else:
m = min(m, diff)
return m
solution([1, 2, 3, 4, 2] )