출력하고자 하는값(ans)을 -1로 초기화한다.
범위내에서 루프를 이용하여 r포인터를 k개가 될때까지 옮겨준다.
(k개 이상의 가장작은 연속 인형들 집합크기 라고 하였으므로 최소가 되려면 k개가 되었을때 길이를 뽑으면 된다.)
r포인터를 옮겼을때 라이언이면 cnt증가,
cnt가 k가 되면 출력하고자하는값(ans)을 갱신시키고
l이 1로 오게되면
l이 당겨졌기때문에 l값에 해당하는 cnt를 감소시켜준다.
l이 오고나서 cnt가 변경되서 r도 움직이고 다시 cnt가 k가 되서 ans가 갱신되고
ans 를 출력하면 된다.
public class p15565 {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int n,k,l,r;
static long ans;
static int[] a;
static int cnt;
static void frame() throws IOException {
st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
a = new int[n + 1];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 1; i <= n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
}
static void execute(){
ans=-1;cnt=0;
for (int l=1,r=0; l<=n; l++){
while(r+1<=n && cnt<k)
{
r++;
if(a[r]==1) {
cnt++;
}
}
if(cnt==k){
if(ans==-1) ans=r-l+1;
ans=Math.min(ans,r-l+1);
}
if(a[l]==1) cnt--;
}
System.out.println(ans);
}
public static void main(String[] args) throws IOException{
frame();
execute();
}
}