(Python, Java) 프로그래머스 - 약수의 개수와 덧셈
in Algorithm on Programmers, Level1
[문제 링크]
Python 풀이1
import math
def divisorCount(x):
count = 0
end = (int)(math.sqrt(x))
for i in range(1, end + 1):
if x % i == 0 and i ** 2 == x:
count += 1
elif x % i == 0:
count += 2
return count
def solution(left, right):
answer = 0
for i in range(left, right + 1):
if divisorCount(i) % 2 == 0:
answer += i
else:
answer -= i
return answer
Python 풀이2
다른 사람이 푼 풀이 중에서 신박한게 있어서 가져와봤다.
루트를 씌운 값이 정수로 딱 떨어지면 해당 수는 약수의 개수가 홀수라는 근거에서 나온 풀이 같다.
import math
def solution(left, right):
answer = 0
for i in range(left, right + 1):
if int(math.sqrt(i)) == math.sqrt(i):
answer -= i
else:
answer += i
return answer
Java 풀이
class Solution {
public int solution(int left, int right) {
int answer = 0;
for (int target = left; target <= right; target++) {
// 약수의 개수가 홀수인 경우는 제곱근인 경우 뿐이 없다.
if (target % Math.sqrt(target) == 0) {
answer -= target;
} else {
answer += target;
}
}
return answer;
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.solution(13, 17));
}
}