[백준/15565] 귀여운 라이언 - JAVA

이지환·2023년 12월 18일

알고리즘(백준) 💻

목록 보기
5/80
post-thumbnail

📌 문제

알고리즘 분류 : 투 포인터
난이도 : 실버1
출처 : 백준 - 귀여운 라이언

🦧 문제 풀이 접근

투포인터를 이용해 f부터 b까지의 1의 갯수를 구한다.
1의 갯수가 K보다 작은경우 b++, K와 같을 경우 f++를 한다.
1의 갯수가 K와 같은 경우 중 b와 f사이의 거리가 최소인 경우를 구한다.

💻 code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        int[] arr = new int[N];
        st = new StringTokenizer(br.readLine()," ");
        for(int i=0;i<N;i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        int f = 0, b = 0, cnt = 0;
        int min=Integer.MAX_VALUE;
        if(arr[0]==1) {
            cnt=1;
        }
        while(b!=N) {
            if(cnt==K)
                min = Math.min(min, b-f+1);
            if(b==f || cnt<K) {
                b++;
                if(b==N)
                    break;
                else if(arr[b]==1)
                    cnt++;
            }
            else {
                if(arr[f]==1)
                    cnt--;
                f++;
            }
        }
        System.out.println(min==Integer.MAX_VALUE?-1:min);
    }
}

🥇 결과

🎓 느낀점

두개의 포인터가 0에서부터 시작하는 투포인터 문제다.

profile
takeitEasy

0개의 댓글