두 정수 left
와 right
가 매개변수로 주어집니다. left
부터 right
까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
약수를 구하는 알고리즘이 필요하다! 처음에 너무 수학스러워서 소인수분해 해서 약수를 구할 수 있다는데 쉽게 설명하면 16은 24 저 4에 1을 더한게 약수의 갯수이다. ㅎㅎ 하지만 나는 그냥 약수의 정의처럼!
약수의 정의
어떤 수나 식을 나누어 나머지가 없이 떨어지는 수나 식을 일컫는 말.
if(n%i) == 0
일 때라는 조건을 넣어서 코드를 작성했다.
이제 약수의 갯수에 짝수나 홀수에 따라서 더해줄지 -를 해줄지 결정해야 된다.
이 부분은 그냥 짝수 인지, 홀수 인지로 계산했다.
def solution(left, right):
answer = 0
for n in range(left, right+1):
count = 0
for i in range(1, n+1):
if(n%i) == 0:
count+= 1;
if(count % 2)==0:
answer += n;
else:
answer -= n;
print(count)
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
와우 awsome하다 여기서 나는 4번째줄에 i**0.5
를 처음에 잘 이해하지 못했는데, 제곱근을 이야기하는 거였다. 제곱근이 정수면 약수가 홀수라는 사실도 오늘 알았다. ㅎㅎㅎ
공부안한 티가 팍팍 나네..ㅋㅋ
세상에는 수학 천재들이 많다! 하지만 나에겐 구글 선생님이 계시다. 화이팅!