[Leetcode] 1018. Binary Prefix Divisible By 5

RexiaN·2025년 11월 24일

0과 1로만 이루어진 배열을 0부터 i 까지 잘라 이진수를 만든 뒤 해당 이진수가 5로 나누어 떨어지는지 확인하는 문제.

처음엔 그냥 nums.map((num, idx) => Number('0b' + nums.slice(0, idx + 1).join('')) % 5 === 0); 으로 한줄 때렸더니 Number 자료형 크기가 초과가 떠서 오버플로우가 발생했다..

BigInt도 에러가 뜨길래 찾아보니 배열의 최대길이가 10^5(100kb) 라서 택도 없는 상황. 나머지가 5이기만 하면 된다는 점에 착안해서 비트 시프트 + 나머지만 계속 구하도록 해서 통과했다. Easy 난이도 임에도 좀 당황하게 만들었던 문제..

function prefixesDivBy5(nums: number[]): boolean[] {
    let rest = 0;
    return nums.reduce((acc, cur, i, arr) => {
        acc.push((rest * 2 + cur) % 5 === 0);
        rest = (rest * 2 + cur) % 5;
        return acc
    }, [])
};

profile
Don't forget Rule No.1

0개의 댓글