강의로 돌아가기
w00cheol

정답입니다. (코드 있음)

n과 상관없이 일정한 프랙탈 형태를 유지하니 0~r 값 에서 0~(l-1) 값을 빼주는 원리입니다.

num까지의 1을 count하는 함수에서는
num을 넘지않는 5의 최대승수를 base로 하여 압축시켰습니다.

5의 n제곱까지의 1의 개수는 4의 n제곱이라는 점을 활용했습니다.

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def solution(n, l, r):
    def count_bit_1(num):
        if num <= 5: return '11011'[:num].count('1')

        base = 1
        while 5 ** (base + 1) < num:
            base += 1

        section = num // (5 ** base)
        remainder = num % (5 ** base)

        answer = section * (4 ** base)

        if section >= 3:
            answer -= (4 ** base)

        if section == 2:
            return answer
        else:
            return answer + count_bit_1(remainder)

    return count_bit_1(r) - count_bit_1(l - 1)
  • oneso123456789@gmail.com

    알고리즘 참고 잘 했습니다. 감사합니다.

    oneso123456789@gmail.com―2023.01.10 19:36
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.