본문 바로가기

ALGORITHM

백준 15565 귀여운 라이언 (Java)

1. 문제 링크

 

15565번: 귀여운 라이언

꿀귀 라이언 인형과, 마찬가지로 꿀귀인 어피치 인형이 N개 일렬로 놓여 있다. 라이언 인형은 1, 어피치 인형은 2로 표현하자. 라이언 인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합의

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

1. 라이언이 K개 이상 포함되는 범위의 크기를 위해 투포인터로 구했다.
2. K개가 될때까지 오른쪽으로 늘리는데, 오른쪽에 라이언이 오면 추가하고, K개 이상이 되면 넘어간다.
3. K개의 경우, 최솟값이 되는지 확인한다.
4. 다음으로 넘길 때, 제일 왼쪽이 라이언일 경우 1을 뺀다.

 

4. 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] split = br.readLine().split(" ");
        int N = Integer.parseInt(split[0]);
        int K = Integer.parseInt(split[1]);
        
        int[] list = new int[N];
        split = br.readLine().split(" ");
        for(int i=0;i<N;i++) {
        	list[i] = Integer.parseInt(split[i]);
        }
        
        int cnt = 0;
        int result = Integer.MAX_VALUE;
        for(int left=1, right=1 ; left<N ; left++) {
        	while(right<N && cnt<K) {
        		if(list[right]==1) {
        			cnt++;
        		}
        		right++;
        	}

        	if(cnt==K) {
        		result = Math.min(result, right-left);
        	}
        	
        	if(list[left] == 1) {
        		cnt--;
        	}
        }
        
        if(result == Integer.MAX_VALUE) {
        	System.out.println(-1);
        }
        else {
        	System.out.println(result);
        }
    }
}

 

'ALGORITHM' 카테고리의 다른 글

백준 13335 트럭 (Java)  (0) 2023.09.17
백준 1939 중량제한 (Java)  (0) 2023.09.16
백준 2056 작업 (Java)  (0) 2023.09.14
백준 2831 댄스 파티 (Java)  (0) 2023.09.12
백준 15684 사다리 조작 (Java)  (0) 2023.09.11