헝D의 일기장
article thumbnail

https://www.acmicpc.net/problem/20922

 

20922번: 겹치는 건 싫어

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

www.acmicpc.net

 

나의풀이

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int answer=0;
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        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, end=0;
        int[] cnt= new int[100001]; //수열의 범위가 100000이하임 
        
        while(end < n){//수열의 최대 길이 안에서 반복 
            while(end < n && cnt[arr[end]] + 1 <= k ){
                cnt[arr[end]]++;
                end++;
            }
            int len=end-start; //최장 연속 부분 수열의 길이
            answer=Math.max(answer,len);
            cnt[arr[start]]--;
            start++; 
        }
        
        bw.write(Integer.toString(answer));
        bw.flush();
        br.close();
        bw.close();
    }
}
profile

헝D의 일기장

@헝D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!