데브허브 | DEVHUB | Binary Prefix Divisible By 5 - Leetcode 1018 - PythonBinary Prefix Divisible By 5 - Leetcode 1018 - Python
- 이진 배열의 각 접두사를 이진수로 해석하여 5로 나누어 떨어지는지 확인하고, 그 결과를 불리언 배열로 반환하는 문제입니다. 🔢
- 핵심 제약사항은 접두사로 형성되는 이진수가 최대 30,000비트까지 커질 수 있어, 대부분의 언어에서 표준 32/64비트 정수형의 범위를 초과한다는 점입니다. 📏
- 파이썬은 임의 정밀도 정수를 지원하므로, 오버플로우 걱정 없이 큰 숫자를 직접 처리할 수 있어 이 문제에 유리합니다. 🐍
- 기본 계산 방식은 현재 숫자를 왼쪽으로 1비트 시프트(2를 곱함)하고 새 비트를 더하여 다음 접두사 숫자를 만듭니다. ⬅️
- 고정 크기 정수를 사용하는 언어에서 오버플로우를 방지하는 핵심 전략은 각 단계마다
(현재_숫자 * 2 + 새_비트) % 5 연산을 적용하여 숫자를 작게 유지하면서 5로 나누어 떨어지는지 여부를 보존하는 것입니다. 💡
- 이 방법의 수학적 근거는 숫자를 2배 하는 것이 5로 나누어 떨어지는 속성을 유지하며, 모듈로 연산의 분배 법칙을 통해 중간 단계에서 모듈로를 적용해도 결과의 일관성이 유지되기 때문입니다. ➕
- 오버플로우가 발생하는 경우, 최상위 비트가 손실되면 이는 5의 배수가 아닌 큰 2의 거듭제곱을 빼는 것과 같아 5로 나누어 떨어지는지 여부에 대한 판단을 왜곡시킵니다. ⚠️