약수의 개수와 덧셈
쉽지만 재미있는 문제였다.
처음에 약수의 개수를 구하는 함수를 만들고
어떻게 효율적으로 구할 수 있을까를 고민했다.그 결과 어차피 약수는 쌍으로 이루어져 있기 때문에
n의 약수를 구할 때 n을 1부터 루트n까지의 수로 나누어서
나누어 떨어지는 수만 약수의 개수로 센 다음, *2를 해주면 된다고 생각했다.근데 그렇게 함수를 짜니까 약수가 같은 수의 쌍으로 이루어진 경우
그니까 4,9,16 같은 수의 경우를 예외로 처리해줘야 했다.
그래서 flag를 써가면서 함수를 수정했는데,
생각해보니 이 조건 자체로 약수의 개수가 홀수인지 짝수인지 판별이 되는거였다 ..!!!그래서 짜던 함수를 버리고 그냥 바로 제곱근이 정수인지만 체크해서
문제를 풀어주었다.참 재미있었다 끗!
def GetNumYaksu(n): cnt = 0 flag = False for i in range(1, int(n ** 0.5) + 1): if i * i == n: flag = True if n % i == 0: cnt += 1 if flag: return cnt * 2 - 1 else: return cnt * 2 def solution(left, right): answer = 0 for n in range(left, right + 1): if int(n ** 0.5) == n ** 0.5: answer -= n else: answer += n return answer