
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
def divisor(n):
if n == 1 :
return 1
elif n == 2:
return 2
cnt = 0
for i in range(2,n):
if n%i == 0:
cnt+=1
return cnt
def solution(left, right):
answer = 0
for i in range(left, right+1):
if divisor(i)%2 == 0:
answer += i
else:
answer -= i
return answer
약수의 개수를 구하는 과정이 반복되기 때문에 이를 함수를 만들고, 호출했다. 왠지 약수의 개수와 관련한 공식이 있을 것 같지만 일단 모르기에.. 다소 비효율적인 듯한 코드를 짰다.
def solution(left, right):
answer = 0
for i in range(left,right+1):
if int(i**0.5)==i**0.5:
answer -= i
else:
answer += i
return answer
어떤 자연수를 제곱하여 나오는 수를 제곱수라고 하는데, 제곱수의 약수의 개수는 홀수라는 점을 이용한 코드다.
1 → 1
4 → 1, 2, 4
9 → 1, 3, 9
16 → 1, 2, 4, 8, 16
제곱수의 약수의 개수 몇 가지를 직접 확인해보면 이해가 더 쉽다.