ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

imos 법

누적합 문제에 적용

 

 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