최대 1 분 소요

part47. 유사 칸토어 비트열

js ver 1.0

function solution(n, l, r) {
    const calculateSum = (lvl, left, right) => {
        if (lvl == 1) {
            return [1, 1, 0, 1, 1].slice(left - 1, right).reduce((acc, el) => acc + el, 0);
        }

        const area = 5 ** (lvl - 1);
        const alpha = Math.ceil(left / area);
        const beta = Math.ceil(right / area);

        if (alpha === beta) {
            return alpha === 3 ? 0 : calculateSum(lvl - 1, left - (area * (alpha - 1)), right - (area * (alpha - 1)));
        } else {
            let sum = 0;
            if (alpha !== 3) {
                sum += calculateSum(lvl - 1, left - (area * (alpha - 1)), area);
            }
            if (beta !== 3) {
                sum += calculateSum(lvl - 1, 1, right - (area * (beta - 1)));
            }
            sum += [1, 2, 4, 5].filter(el => el > alpha && el < beta).length * (4 ** (lvl - 1));
            return sum;
        }
    };

    return calculateSum(n, l, r);
}

실행결과_js ver 1.0


js ver 1.1

function solution(n, l, r) {
    let answer = 0;
    for (let i = l - 1; i <= r - 1; i++) {
        if (!i.toString(5).match('2')) answer += 1;
    }
    return answer;
}

실행결과_js ver 1.1


업데이트: