코딩테스트/c++

구간의 합

웅드 2023. 5. 20. 23:36

★ 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 알고리즘이다.

 

  • 먼저 합 배열 S 는 S[i] = A[0] + A[1] + A[2] + ... + A[ i - 1 ] + A[ i ] 로 정의된다.
  • 합 배열은 전처리한 배열이라고 생각하면 된다.
  • 합 배열을 미리 구해 놓으면 기존 배열의 일정 범위의 합을 구하는 시간복잡도가 O(N)에서 O(1)로 감소하게 된다.

 

  • O(1)이 가능하게 해주는 합 배열 공식은 S[ i ] = S[ i - 1] + A[ i ] 이다.
  • i 에서 j 까지 구간의 합을 구하는 공식은 S[ j ] - S[ i - 1] 이다
  • A[2]에서 A[5]까지의 합을 구한다고 하면
    • S[5] = A[0] + A[1] + A[2] + A[3] + A[4] + A[5]
    • S[1] = A[0] + A[1]
    • S[5] - S[1] = A[2] + A[3]+ A[4] + A[5]
  • 합 배열만 미리 구해두면 구간의 합은 한번의 계산으로 구할 수 있기 때문에 합 배열과 구간 합 공식을 적재적소에 활용하면 시간 복잡도를 줄이는데 많은 도움을 준다!

 

출처: Do it! 코딩테스트 c++

반응형