#include <iostream>
#include <algorithm>
using namespace std;
int n,k;
int doll[1000001];//인형 진열 상태
int cnt = 0;//라이언 인형의 갯수
void INPUT()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> k;
for(int i = 0; i < n; i++) cin >> doll[i];
}
void SOLVE()
{
//Init
int ans = 2e9;
int left = 0,right = 0;
if(doll[left] == 1) cnt = 1;
while(right < n)
{
if(cnt == k)
{//라이언 인형의 수가 k와 같다면
ans = min(ans,right-left+1);//최소 길이 갱신
//옮기기 전 왼쪽 포인터가 라이언 인형을 가리킨다면 cnt 1 감소 후
if(doll[left] == 1) cnt--;
//왼쪽 포인터를 오른쪽으로 옮긴다.
left++;
}
else if(cnt < k)
{//라이언 인형의 수가 k보다 작다면
right++;//오른쪽 포인터를 옮긴 후
if(doll[right] == 1) cnt++;//라이언 인형을 가리킨다면 cnt 1증가
}
}
if(ans==2e9) cout << -1;
else cout << ans;
}
int main()
{
INPUT();
SOLVE();
}
GOLD5 미만 난이도는 알고리즘 및 풀이 설명을 주석으로 대체합니다.
주석을 참고해주세요.