스타수열

Lee1231234·2024년 4월 12일

코딩테스트

목록 보기
72/95

1차원 정수 배열 a가 매개변수로 주어집니다. a의 모든 부분 수열 중에서 가장 길이가 긴 스타 수열의 길이를 return 하도록 solution 함수를 완성해주세요. 이때, a의 모든 부분 수열 중에서 스타 수열이 없다면, 0을 return 해주세요.

제한사항
a의 길이는 1 이상 500,000 이하입니다.
a의 모든 수는 0 이상 (a의 길이) 미만입니다.

맨처음에는 중복되는 수열 하나만 있으면 해결이 되는 문제인줄 알았지만
실제 중복이 가장 많이된다고 하더라도 그게 최대수열이라는 보장이 없었다.
하지만 지금까지 가장 긴 스타수열의값을 찾았다면 그것보다 짧은 수열은 계산하지 않아도 된다.
이후 스타수열이 되는 조건만 맞춰준다면 문제는 해결이 가능하다.

import java.util.*;
class Solution {
    public int solution(int[] a) {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        int answer = -1;
        for(int i=0;i<a.length;i++){
            map.put(a[i],map.getOrDefault(a[i], 0)+1);
        }

        for(int key : map.keySet()){
            if(map.get(key)<answer) continue; //쓸모없이 작은 값에 대해서 하지않음.
            int count = 0;
           
            for(int i=0;i<a.length-1;i++){
                if(key != a[i] && key != a[i+1]) continue;
                if(a[i] == a[i+1]) continue;    
                count++;
                i++; //이미 묶은 수열을 다른것과 겹치지않게
            }
            answer = Math.max(answer,count);
        }
       
        return answer * 2;
    }
}
profile
not null

0개의 댓글