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;
}
}