: 인덱스마다의 이전원소값과 현재 원소값을 누적시키면서
메모이제이션 형태로 저장함.
연속된 원소의 값을 구해야 할때 사용하는 알고리즘 기법.
메모이제이션 인덱스가 의미하는 바는
0번째 인덱스 부터 n번째 인덱스 까지의 합
: 핵심이고, 생각해보기
5번에서 8번까지의 연속된 값이 필요하다고 한다면?
d[8]번 : 즉 0번 인덱스부터 8번 인덱스 까지의 합임.
d[5]번 : 즉 0번 인덱스부터 5번 인덱스 까지의 합임.
d[8] - d[5] 라고 한다면 ?
-> 6번에서 7,8번가지의 원소의 합이 남게됨.
추가적으로 여기서 v[5] 원소를 더하면됨.
d[n] = d[n - 1] ~ 으로 시작해야 하는데,
반복적인 코드 구현을 위해
// 누적합 메모이제이션을 만들기 위해
// 원소의 초기값 인덱스를 1로 시작해서 n으로 끝마치게 해야함.
for(int i = 1; i <= n; ++i)
{
cin >> v[i];
d[i] = d[i - 1] + v[i];
}
=> 이렇게 나타낼 수 있음.
이렇게 하면 , 위의 이해하기를 좀 다른 방식으로 코드 접근해야 함.
int sum = d[8 + 1] - d[4]
: 이런식으로 풀면됨.
: 백준 2559번 수열
: 2022 카카오 6번 문제
-> 효율성 틀렸다...
- 이차원 배열의 인덱스 ~ 인덱스 하기에는 조건 때문에 시간복잡도가 어마어마해서 효율성에서 빵점 맞았다.
: 0보다 큰 컨테이너의 갯수를 구하라! 가 6번 문제의 답이다.
https://www.acmicpc.net/problem/15724
https://www.acmicpc.net/problem/19951
: 백준 2167번 2차원 배열의 합
//참고한 블로그 님
https://sorious77.tistory.com/125