강의로 돌아가기
브라이언

약수 개수를 통으로 구하는 방법을 모르면 못 푸는 문제 ( 힌트 )

9,10번이 시간을 엄청 먹어서, 약수를 제곱으로 구한다거나 하면 더 개선할 방법이 없습니다.
딱 특정한 공식을 알아야만 푸는 문제고 딱히 기술적 접근도 아니니 참고해서 푸시길 바랍니다.

def solution(e, starts):
    divisor=[0 for i in range(e+1)]
    for i in range(2,e+1):
        for j in range(1,min(e//i+1,i)):
            divisor[i*j]+=2
    for i in range(1,int(e**(1/2))+1):
        divisor[i**2]+=1

  • 안찬혁

    line 5 : divisor[i*j] += 2, line 6 : int( e ** 0.5) +1, line 7 : divisor[i**2] += 1의 의미인것 맞죠?

    안찬혁―2022.11.28 01:30
  • 브라이언

    이거 제대로 카피가 안되네요. def solution(e, starts): divisor=[0 for i in range(e+1)] for i in range(2,e+1): for j in range(1,min(e//i+1,i)): divisor[i*j]+=2 for i in range(1,int(e**(1/2))+1): divisor[i**2]+=1

    브라이언―2022.11.28 01:51
  • daeungdaeung

    안녕하세요, 약수 구하는 방법 힌트 주셔서 다행히도 풀렸습니다 :-) 궁금한 점이 있는데, "for i in range(2, e + 1): for j in range(i, e + 1, i): arr[j] += 1" 이렇게 푸는거랑 계산속도에서 왜 많이 차이가 나는지 설명이나 참고자료를 알려주실 수 있을까요?

    daeungdaeung―2022.12.06 17:01
  • SOYPONG

    시간복잡도는 O(n^2) 으로 똑같은데 단순히 계산이 반으로 줄어들어서 아슬아슬하게 들어오네요

    SOYPONG―2022.12.30 03:06
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.