기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

알고리즘

[알고리즘] 구간 합, 누적 합

2023. 10. 20. 17:59
반응형

코드보다는 알고리즘 접근 방법에 대해 정리합니다!

 

1. 누적 합이란?

배열에서 0번째 인덱스부터 N번째 인덱스까지 탐색을 진행하면서 누적해서 값을 더한 결과를 말합니다.

array[1,3,5,6,7,9,13]가 있으면 1부터 13까지 순차적으로 탐색하면서 값을 더한 것을 말하는데, 다만 값을 단순하게 더하는 것이 아닌 누적해서 더한다는 것이 포인트입니다.

1+, (1+3), (1+3+5), (1+3+5+6), ... 이런식으로 더해 나가야하는 거죠!

코드로 단순하게 구현해 보면 아래와 같은 모습이 됩니다.

for(int i = 0; i<n; i++){
	for(int j = 0; j<=i; j++){
    	sum[i] += arr[j];
    }
}

이렇게 될 경우 시간 복잡도는 O(N^2)가 걸리게 되는데, sum_arr라는 새로운 배열을 만들고 계산한 값을 배열에 저장해서 사용하면 O(N)으로 누적합을 구할 수가 있게 됩니다!

 

for(int i= 0; i<n; i++){
	sum_arr[i+1] = sum_arr[i] + arr[i];
}
console.log(sum_arr[arr.length])

 

누적이라는 단어가 나온다면, 위처럼 계산한 값을 저장할 새로운 배열을 만들어야겠다는 생각으로 접근하는 것이 좋습니다.

 

 

2. 구간합이란?

누적합의 알고리즘과 같은데, 인덱스만 조금 달라집니다.

 

구간합 알고리즘은 현재 진행 단계의 인덱스까지의 합을 저장하는 sum[] 배열을 사용합니다.

sum[i-1]까지의 총합에 arr[i]를 더하면 sum[i]를 구할 수가 있게 됩니다. 

하지만, 0번째부터 N까지를 구할때 i-1이라는 로직이 들어가기 때문에 sum[]배열을 사용할 경우 arr[]보다 +1 크게 만들고, 초기 값을 0으로 지정해주어야 합니다!

반응형
저작자표시 변경금지 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] 투 포인트(Two Point)  (1) 2023.10.17
[알고리즘] 소수판별, 에라토스테네스의체  (0) 2023.10.17
    '알고리즘' 카테고리의 다른 글
    • [알고리즘] 투 포인트(Two Point)
    • [알고리즘] 소수판별, 에라토스테네스의체
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바