1. map.remove() 를 하면 -> map.size()로 종류의 개수를 단순하게 파악가능
2. 그리고 slidingwindow를 써야 시간 제한을 맞출 수 있음 (조건값이 큰걸 보면 , 그냥 풀었을 때 타임 초과가 나올걸 예상할 수 있음)
일단 코드...
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void solution(int[] arr, int N, int K){
Map<Integer ,Integer> map = new HashMap<>();
for(int i=0; i<K; i++){
Integer frequency = map.getOrDefault(arr[i], 0);
map.put(arr[i], frequency + 1);
}
System.out.print(map.size() + " ");
int lt = 0;
int rt = K-1;
while(rt < N-1){
if(map.get(arr[lt])==1){
map.remove(arr[lt]);
} else{
map.put(arr[lt], map.get(arr[lt]) - 1);
}
lt++;
rt++;
Integer frequency = map.getOrDefault(arr[rt], 0);
map.put(arr[rt], frequency+1);
System.out.print(map.size() + " ");
}
}
public static void main(String[] args) {
//0. Scanner 준비
Scanner sc = new Scanner(System.in);
//1. 입력
int N = sc.nextInt();
int K = sc.nextInt();
int[] arr = new int[N];
for(int i=0; i<N; i++){
arr[i] = sc.nextInt();
}
//2. solution() 호출하여 결과 출력
solution(arr, N, K);
}
}