<4.3> 매출액의 종류

mutexlocking·2022년 10월 22일
0

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);


    }
}
profile
개발자가 되고자 try 하는중

0개의 댓글