Algorithm/concept

Coding Test(Sliding Window)

땅지원 2022. 6. 6. 18:00

고정 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이요해 문제를 풀이하는 알고리즘

● Brute Force - list slicing 을 이용한 방법

for i in range(len(nums)-k+1):
    r.append(max(nums[i:i+k]))

  queue을 이용한 방법 (Fast)

for i, v in enumerate(nums):
	window.append(v)
    if i<k-1:
    	continue

 

하지만 이러한 경우는 k 크기 만큼의 윈도우를 리스트에서 계속 탐색 해야하기 때문에 O(k * n)의 시간복잡도를 가진다.

 

 

 

 

● 슬라이딩 윈도우 활용 (구간합, 누적합, Prefix sum)

이렇게 되면 전체 시간 복잡도는 O(N)이 되며 시간복잡도를 많이 줄일 수 있다.

 

투 포인터는 정렬된 상태에서 써야 하지만 슬라이딩 윈도우는 제약을 받지 않고 일정한 윈도우 크기로 움직인다