def isDivisorEven(x):
div = 0
for i in range(1, x+1):
if x % i == 0:
div += 1
return (True if div%2 == 0 else False)
def solution(left, right):
answer = 0
for i in range(left, right+1):
isEven = isDivisorEven(i)
if isEven:
answer += i
else:
answer -= i
return answer
약수 구하는 부분이 뭔가 더 좋은 방법이 있을 것만 같아서 다 풀고 다른 사람 풀이도 찾아봤는데 진짜 생각 못한 방법을 발견했다!.! 그래서 그걸로도 다시 해봤는데, 그 코드는 이따가 써야지🙈
1. 약수 개수 구해서 짝수면 True, 홀수면 False 리턴해주는 함수 만듦.
2. for문 돌면서 해당되는 숫자 하나씩 함수로 보내고
리턴값이 True이면 (answer + 해당 숫자), (False면 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
이게 무엇이냐 하면,, (i ** 0.5)는 i의 제곱근을 구하는 코드인데,
제곱근이 정수로 표현 가능한 수는 약수의 개수가 홀수이다!
그래서 제곱근을 구하고 제곱근에 int 씌운것과 비교해서 정수인지 아닌지 판단
-> 같으면 약수의 개수가 홀수, 아니면 짝수
이렇게 돼서 저런 코드가 나온다,,!