본문 바로가기
Coding Test Java

인프런 - 매출액의 종류

by seonggu 2024. 1. 22.

투포인터, 슬라이딩 윈도우, 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+" ");
    }
}