코딩테스트/알고리즘

7-2. 슬라이딩 윈도우

초코chip 2024. 4. 2. 20:20

개념

정의

  • 정의: 투 포인터로 범위를 지정한 다음 범위(window)를 유지한채로 이동(sliding)하며 문제를 해결하는 방법

 

중요

  • 전체 크기(N)와 윈도우 크기(M)이 있을때, 핵심은 시간 복잡도를 O(NM)이 아닌 O(N)으로 진행하는 것
    • 즉, 교집합의 정보를 공유하고, 차이가 발생하는 양쪽 끝 원소만을 갱신하는 방법

 

언제 사용?

특정 범위를 지속해서 탐색하는 경우

int count = 0;
//투 포인터 선언
int s_index = 0;
int e_index = P-1;

while(e_index < S-1){
    if(hm.get('A') >= A && hm.get('C') >= C && hm.get('G') >= G && hm.get('T') >= T){
        count++;
    }

	//차이가 발생하는 왼쪽 부분 처리
    /// 기존에 있던 왼쪽 부분 삭제
    hm.put(ctr[s_index], hm.get(ctr[s_index]) - 1);
    s_index++;

	//차이가 발생하는 오른쪽 부분 처리
    /// 새로 들어오는 오른쪽 부분 삽입
    e_index++;
    hm.put(ctr[e_index], hm.get(ctr[e_index]) + 1);
}

 

 

'코딩테스트 > 알고리즘' 카테고리의 다른 글

8-2. 바이너리 인덱스 트리(BIT) (= 펜윅 트리 )  (0) 2024.04.02
8. 구간합  (0) 2024.04.02
7. 투 포인터  (0) 2024.04.02
6. 소수 판별  (0) 2024.04.02
5. 다이나믹 프로그래밍(동적 계획법)  (0) 2024.02.26