스타수열
문제풀이
- 집합 안에 있는 모든 숫자를 센다.
- 숫자를 카운팅한 배열을 내림차순으로 정렬한다.
- 숫자 카운팅이 큰 숫자부터 스타수열을 만들 수 있는지 확인한다.
- 최댓값이 바뀐다면 계속 진행하고, 바뀌지 않는다면 break
- 수타수열의 길이는 최대 숫자가 나오는 횟수 * 2 이므로, 최대 숫자부터 스타수열을 구해줘야한다.(단, 숫자가 많다고 수열이 길어지는 것은 아님)
소스코드
const log = console.log;
function solution(a) {
let answer = 0;
let obj = a.reduce((acc, val) => {
acc[val] ? acc[val]++ : acc[val] = 1;
return acc;
},{});
let entries = Object.entries(obj).sort((a,b) => b[1]-a[1]);
for(const [key,value] of entries){
const ans = count(a, +key);
if(answer < ans) answer = ans;
else break;
}
return answer;
}
function count(arr, value){
let count = 0;
for(let i=0 ; i<arr.length-1 ; i++){
if(arr[i] !== value && arr[i+1] !== value) continue;
if(arr[i] === arr[i+1]) continue;
count+=2;
i++;
}
return count;
}