[Leetcode] 1838. Frequency of the Most Frequent Element

RexiaN·2025년 10월 21일

낮에 푼 Maximum Frequrency 와 비슷한 문제로 leetcode 가 추천해줘서 풀어본 문제. 이 문제는 더할 수 있는 량 k 를 주고 배열의 각 원소들에 나눠서 더할 수 있다.

먼저 갯수별 분포인 counts 배열을 만들고 각 숫자에서 배열의 뒤쪽을 바라보며 거리 * 갯수 로 availableAmount 를 찾는다. 이후 주어진 k 값 만큼 사용이 가능한지 판별을 하며 나아가도록 했다.

실행시간이 박살난 것은 배열의 index 를 한 칸씩 전진시키면서 뒤쪽을 for 문으로 순회했기 때문으로 보인다. 일단 코딩테스트가 있어 이 코드의 최적화는 다음 기회에..

function maxFrequency(nums: number[], k: number): number {
    nums.sort((a, b) => a - b);

    const counts = Array(Math.max(...nums) + 1).fill(0);

    for (let i = 0; i < nums.length; i++) {
        counts[nums[i]] += 1
    }

    let answer = 0;

    let index = 1;
    while (index < counts.length) {
        let currentK = k;
        let left = Math.max(0, index - k);

        if (counts[index] === 0) {
            index += 1;
            continue;
        }

        let currentValue = counts[index]

        for (let i = index - 1; i >= left; i--) {
            const availableAmount = (index - i) * counts[i]
            
            if (currentK > availableAmount) {
                currentK -= availableAmount
                currentValue += counts[i]
            } else {
                currentValue += Math.floor(currentK / (index - i))
                break;
            }
        }

        answer = Math.max(answer, currentValue)
        index += 1
    }

    return answer
};

profile
Don't forget Rule No.1

0개의 댓글