본문 바로가기
Other/Programming

imos 법

by 해학 2024. 3. 25.
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