문제에서 말하는 연속 부분 수열이
연속된 숫자로 이루어진 부분 수열인줄 알고 헤매다가
인접한 원소들로 이루어진 모든 부분 집합
이라는 것을 뒤늦게 이해해서 이해한 이후에는 쉽게 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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()); // 같은 정수 K개 이하
int[] check = new int[100001]; // 100,000 이하의 양의 정수로 이루어진 수열
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
int start = 0;
int end = 0;
int answer = Integer.MIN_VALUE;
while(start < N){
while(end < N && check[arr[end]] < K){
check[arr[end]]++;
end++;
}
answer = Math.max(answer, end - start);
check[arr[start]]--; // 기존 start에 해당하는 원소의 카운트 감소
start++; // start 오른쪽 한칸 이동
}
System.out.println(answer);
}
}