본문 바로가기
알고리즘/투포인터

[백준][JAVA] 20922번 겹치는 건 싫어

by 박뀨뀨 2024. 2. 18.

 

 

20922번: 겹치는 건 싫어

홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열

www.acmicpc.net

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int[] A = new int[N];

        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }

        int maxLength = 1;
        int left = 0;
        int right = 0;
        Map<Integer, Integer> map = new HashMap<>();

        while (right < N) {
            if (map.getOrDefault(A[right], 0) + 1 <= K) {
                map.put(A[right], map.getOrDefault(A[right], 0) + 1);
                maxLength = Math.max(maxLength, right - left + 1);
                right++;
            } else {
                map.put(A[left], map.get(A[left]) - 1);
                left++;
            }
        }
        System.out.println(maxLength);
    }
}
728x90