728x90
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int N = s.nextInt(); // 멀티탭 구멍의 개수 N
        int K = s.nextInt(); // 전기 용품의 총 사용횟수 K

        // 사용할 자료 Queue에 담기
        int[] arr = new int[K];
        for(int i=0; i<K; i++){
            arr[i] = s.nextInt();
        }

        // 멀티탭 사용하기
        Set<Integer> tab = new HashSet<>();
        int changeCnt = 0; // 변경 횟수
        for(int i=0; i<K; i++){
            if(tab.size()>=N){ // 멀티탭 구멍이 가득 차면,
                if(tab.contains(arr[i]))
                    continue; // 현재 사용중인 전기제품일 경우, 그대로
                tab.remove(changeElectron(tab, arr, i, K));
                changeCnt++;
            }
            tab.add(arr[i]); // 2, 2, 2 이렇게 계속 들어올떄 Set 이여서 중복 제거된다
        }

        System.out.println(changeCnt);
    }

    public static int changeElectron(Set<Integer> tab, int[] arr, int idx, int arrLength){
        HashMap<Integer, Boolean> check = new HashMap<>();
        int falseCnt = 0;

        // 전기제품 세팅
        for(Integer i : tab) { // tab에 [1,2,3] 전기제품이 있다면,
            check.put(i, false); // [1:false, 2:false, 3:false]
            falseCnt++;
        }

        // 뒤에 사용할 전기제품인거 확인하기
        for(int i=idx; i<arrLength; i++){ // arr=[5, 1, 2]라면,
            if(falseCnt == 1) break;
            if(check.containsKey(arr[i]) && check.get(arr[i]) == false){
                check.put(arr[i], true);
                falseCnt--;
            }
        }

        // 사용하지 않는 전기제품 반환하기
        for(Integer i : check.keySet()){
            if(check.get(i)==false){
                return i;
            }
        }

        return arr[idx];
    }
}
728x90

'algorithm > baekjoon' 카테고리의 다른 글

[BOJ] 14425 문자열 찾기 (Java)  (0) 2023.10.19
[BOJ] 2343 기타 레슨 (Java)  (0) 2023.01.31
[BOJ] 2446 별 찍기-9 (Java)  (0) 2022.09.29
[BOJ] 1978 소수 찾기 (Java)  (2) 2022.06.28
[BOJ] 4673 셀프 넘버 (Java)  (0) 2022.06.28

+ Recent posts