티스토리 뷰

728x90

풀이 및 소스코드

 

0부터 k개의 초밥을 먹은 뒤 개수를 센 후,

그 뒤로 부터는 하나 뱉고 먹고(?) 의 반복을 해주면 된다.

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

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();

		st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int d = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());
		int[] chobab = new int[n];
		for(int i=0;i<n;i++) {
			chobab[i] = Integer.parseInt(br.readLine());
		}
		int[] v = new int[d+1];
		int res = 0;
		
		for(int i=0;i<k;i++) {
			if(v[chobab[i]]==0) {
				res++;
			}
			v[chobab[i]]++;
		}
		
		int cnt = res;
		for(int i=1;i<n;i++) {
			if(cnt>=res) {
				if(v[c]==0) {
					res = cnt+1;
				}else {
					res = cnt;
				}
			}
			v[chobab[i-1]]--;
			if(v[chobab[i-1]]==0) {
				cnt--;
			}
			if(v[chobab[(i+k-1)%n]]==0) cnt++;
			v[chobab[(i+k-1)%n]]++;
		}
		System.out.println(res);
	}
}
반응형