728x90
https://www.acmicpc.net/problem/2531
package a1005;
import java.util.*;
import java.io.*;
public class 회전초밥 {
static int n,d,k,c;
static int []arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
arr = new int[n+k-1];
for(int i=0; i<n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
for(int i=n; i<n+k-1; i++) {
if((i-n)>=0) {
arr[i] = arr[i-n];
}
}
int[]chk = new int[d+1];
int total =0;
int cnt=0;
for(int i=0; i<k; i++) { //윈도우 크기 k, 이만큼 정보저장
chk[arr[i]]++;
if(chk[arr[i]]==1)cnt++;
}
boolean tg = false; //쿠폰추가
total =cnt+1;//쿠폰추가
if(chk[c]>0) {tg=true;total--;}
int j =k-1;
int i=0;
while(j<arr.length) { //슬라이딩 윈도우를 이용해서 구한다
chk[arr[i]]--;
if(chk[arr[i]]==0)cnt--;
i++;
j++;
if(j>=arr.length)break;
chk[arr[j]]++;
if(chk[arr[j]]==1)cnt++;
if(chk[c]>0)tg=true;
else tg=false;
if(tg) {
total = Math.max(total, cnt);
}
else {
total = Math.max(total, cnt+1);
}
}
System.out.println(total);
}
}
'백준 > 슬라이딩윈도우' 카테고리의 다른 글
DNA비밀번호 (1) | 2021.10.02 |
---|---|
N번째 큰수 (0) | 2021.10.02 |
가장긴짝수연속합부분수열 (0) | 2021.10.02 |
게으른 백곰 - 10025번(Java) (0) | 2021.09.16 |
꿀아르바이트 - 12847번(Java) (0) | 2021.09.16 |