투포인터, 슬라이딩 윈도우, HashMap으로 풀이
import java.util.*;
class Main {
public ArrayList<Integer> solution(int n, int k, int[] arr){
ArrayList<Integer> answer = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=0; i<k-1; i++){ // rt 이전값까지
map.put(arr[i], map.getOrDefault(arr[i], 0)+1);
}
int lt = 0;
for(int rt=k-1; rt<n; rt++) {
map.put(arr[rt], map.getOrDefault(arr[rt], 0)+1);
answer.add(map.size()); //사이즈 넣기
map.put(arr[lt], map.get(arr[lt])-1); //lt값과 같은 키의 value 하나 감소
if(map.get(arr[lt]) == 0 ) // lt의 value가 0이면 remove해주고 증가
map.remove(arr[lt]);
lt++;
}
// System.out.println(map.keySet());
// System.out.println(map.size());
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+" ");
}
}
'Coding Test Java' 카테고리의 다른 글
인프런 - 크레인 인형 뽑기 (카카오) (0) | 2024.01.29 |
---|---|
인프런 - 괄호 문자 제거 (0) | 2024.01.29 |
인프런 - 모든 아나그램 찾기 (0) | 2024.01.22 |
알고리즘 코딩 테스트 2일차 (0) | 2023.03.24 |
알고리즘 코딩 테스트 1일차 (0) | 2023.03.21 |