728x90
누적합 문제에 적용
What ?
imos 법
- 정해진 구간 내에 시작과 끝 이 포함된 부분 집합에 대한 명령이 여러개 들어올 때, 연산 시간을 줄이는 방법입니다.
How ?
- 구간의 시작점과 끝점 에 해당하는 위치를 기록합니다.
( 구간의 시작 지점에는 특정 값을 더하고, 구간의 끝 지점 다음에는 해 당 값을 빼서, 구간을 표시 합니다. )
- 표시한 배열을 사용하여 각 지점에서의 누적 값을 계산합니다.
( 이를 통해 각 지점에서의 구간의 개수나 발생 횟수를 구할 수 있습니다. )
- 필요에 따라 누적 값을 이용하여 원하는 처리를 수행합니다.
1차원 배열에서 구현
let imos = [ ... ] let now = 0; for (let i = 0; i < imos.length; i++) { now += imos[i]; imos[i] = now; }
- 1차원 배열을 생성하고 값을 0으로 초기화한 후, 시작점에 1을 더하고 끝점에 1을 빼줍니다.2차원 배열에서 구현
let imos = [ ... ] for (let i = 0; i < imos.length; i++) { let now = 0; for (let j = 0; j < imos[0].length; j++) { now += imos[i][j]; imos[i][j] = now; } } for (let i = 0; i < imos[0].length; i++) { let now = 0; for (let j = 0; j < imos.length; j++) { now += imos[j][i]; imos[j][i] = now; } }
- 2차원 배열의 경우 사각형의 꼭지점을 시작점과 끝점으로 생각합니다.
- 행과 열을 구별해 2번 반복해줍니다.
728x90
'Other > Programming' 카테고리의 다른 글
버전 관리 시스템 (VCS) (0) | 2024.09.20 |
---|---|
최대공약수 ( gcd ) & 최소공배수 ( lcm ) (0) | 2024.08.02 |
while 문 (0) | 2024.02.23 |
메서드 (0) | 2024.02.02 |
직렬화 (1) | 2024.01.26 |