슬라이딩 윈도우 예제 - 1

문제 분석

  • PS의 길이가 1,000,000으로 매우 크기 때문에 O(n)의 시간 복잡도 알고리즘으로 문제를 해결해야 한다.

  • 이때 부분 문자열의 길이가 P이므로 슬라이딩 윈도우의 개념을 이용하여 문제를 쉽게 해결할 수 있다.

img.png
  • 그림을 보면 P의 길이를 갖는 윈도우를 지정하여 리스트 S의 시작점에 놓는다.

  • 그런 다음, 윈도우를 오른쪽으로 밀면서 윈도우에 잡힌 값들이 조건에 맞는지 탐색한다.

  • 리스트 S의 길이만큼만 탐색을 진행하면 되므로 O(n)의 시간 복잡도가 걸린다.

손으로 풀어보기

  1. 리스트 S와 비밀번호 체크 리스트를 저장한다.

img_1.png
  1. 윈도우에 포함된 문자로 현재 상태 리스트를 만든다. 그런 다음 현재 상태 리스트와 비밀번호 체크 리스트를 비교하여 유효한지 판단한다.

img_2.png
  1. 윈도우를 한 칸씩 이동하며 현재 상태 리스트를 업데이트한다. 현재 상태 리스트를 업데이트한 이후에는 비밀번호 체크 리스트와 비교하여 유효한지 판단한다. 현재 상태 리스트를 업데이트할 때는 빠지는 문자열, 신규 문자열만 보고 업데이트하는 방식으로 진행한다.

img_3.png

슈도코드

  • 유효한 비밀번호를 검사할 때 기존 검사 결과에 새로 들어온 문자열, 제거되는 문자열만 반영하여 확인하는 것이 핵심

코드 구현 - 파이썬

코드 구현 - 자바

Last updated