[프로그래머스] 레벨3 (level3) 스타수열

2021년 03월 25일, 15:51

스타수열

문제풀이

  1. 집합 안에 있는 모든 숫자를 센다.
  2. 숫자를 카운팅한 배열을 내림차순으로 정렬한다.
  3. 숫자 카운팅이 큰 숫자부터 스타수열을 만들 수 있는지 확인한다.
  4. 최댓값이 바뀐다면 계속 진행하고, 바뀌지 않는다면 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;
}