📌문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
📌제한 사항
- 1 ≤ left ≤ right ≤ 1,000
📌 Solution
이번 문제도 어떻게 보면 상당히 간단한 문제이다. 그치만 여러 풀이를 보다보니 정말 생각지도 못한 방법이 있었다.
def yaksu(n):
cnt=0
for i in range(1, n+1):
if n%i==0:
cnt+=1
return cnt
def solution(left, right): # 약수의 개수
answer = 0
for i in range(left, right+1):
if yaksu(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
위 코드와 아래 코드를 보게 되면 코드가 더 짧아지게 되었는데 주석에 작성한 것처럼 제곱수에 해당하는 모든 수들은 약수의 갯수가 무조건 홀수이다! 모든 약수들은 각각의 짝이 있는데 제곱수는 그 짝이 없으므로 홀수개가 될 수 밖에 없다!
✨ 문제 해결하며 알게 된 점