Algorithm/문제
33. 매출액의 종류
챛채
2023. 9. 4. 17:16


tow pointer, sliding window 사용
lt 당길 때 map의 key 자체를 삭제하면 안되고 값만 -1해야한다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Map;
public class Main {
public ArrayList<Integer> solution(int n, int k, int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<Integer, Integer> HM = new HashMap<>();
//k=4이면 3일까지 미리 세팅해두기
for (int i = 0; i < k - 1; i++) {
HM.put(arr[i], HM.getOrDefault(arr[i], 0) + 1);
}
int lt =0;
for (int rt = k - 1; rt < n; rt++) {
HM.put(arr[rt], HM.getOrDefault(arr[rt], 0) + 1);
answer.add(HM.size());
HM.put(arr[lt], HM.get(arr[lt]) - 1);
if (HM.get(arr[lt]) == 0) {
HM.remove(arr[lt]);
}
lt++;
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt(); //매출 기록 개수
int k = kb.nextInt(); //연속된 길이
int [] arr = new int[n];
for (int i=0; i<n; i++){
arr[i] = kb.nextInt();
}
for(int x : T.solution(n,k,arr)) System.out.print(x+" ");
}
}