[투포인터] 20922번 - 겹치는 건 싫어

안수진·2024년 8월 5일

Baekjoon

목록 보기
29/55
post-thumbnail

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

📝 나의 풀이

문제에서 말하는 연속 부분 수열이
연속된 숫자로 이루어진 부분 수열인줄 알고 헤매다가

인접한 원소들로 이루어진 모든 부분 집합

이라는 것을 뒤늦게 이해해서 이해한 이후에는 쉽게 풀었다.

👩🏻‍💻 제출 코드

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

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()); // 같은 정수 K개 이하
        int[] check = new int[100001]; // 100,000 이하의 양의 정수로 이루어진 수열
        int[] arr = new int[N];

        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int start = 0;
        int end = 0;
        int answer = Integer.MIN_VALUE;

        while(start < N){
            while(end < N && check[arr[end]] < K){
                check[arr[end]]++;
                end++;
            }
            answer = Math.max(answer, end - start);
            check[arr[start]]--; // 기존 start에 해당하는 원소의 카운트 감소
            start++; // start 오른쪽 한칸 이동
        }

        System.out.println(answer);

    }
}
profile
항상 궁금해하기

0개의 댓글