코딩 테스트

구간 합

sping2 2023. 11. 18. 00:22

합 배열(S)을 구하는 것부터 시작한다.

S[i] = A[0] + A[1] + ... + A[i-1] + A[i]

인덱스 0 1 2 3 4 5
리스트 A 3 5 2 1 9 6
합 배열 S 3 8 10 11 20 26

ex) S[4] = A[0] + A[1] + A[2] + A[3] + A[4] = 3 + 5 + 2 + 1 + 9 = 20

 

A[i] ~ A[j] 리스트의 합을 구한다고 하자.

- 합 배열(S) 없이 구한다면, 최악의 경우 시간 복잡도가 O(N)이다.

- 하지만 위의 합 배열을 사용한다면 O(1)으로 시간 복잡도가 확 줄어든다.

 

합 배열 S 구하는 공식

S[i] = S[i-1] + A[i]

 

구간 합 구하는 공식(A[i] ~ A[j] 리스트의 합)

S[j] - S[i-1]

 

예를 들어서 A[1] ~ A[4] 구간을 구한다고 해보자.

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

S[0] = A[0]

S[4] - S[0] = A[1] + A[2] + A[3] + A[4]

 

'코딩 테스트' 카테고리의 다른 글

스택과 큐  (0) 2023.11.19
백준 골드5 달성!  (0) 2023.11.19
배열과 리스트  (0) 2023.11.18
시간 복잡도  (0) 2023.11.17
[백준 2164번 카드2] deque 사용하기  (0) 2023.10.31