약수의 개수와 덧셈
문제 설명
두 정수 left
와 right
가 매개변수로 주어집니다. left
부터 right
까지의 모든 수들 중에서,
약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
left
≤right
≤ 1,000
입출력 예
left | right | result |
---|---|---|
13 | 17 | 43 |
24 | 27 | 52 |
풀이
첫 번째 풀이
def getDivisorCount(n):
count = 1
for i in range(1, n // 2 + 1):
if n % i == 0:
count += 1
return count
def solution(left, right):
sum = 0
for i in range(left, right + 1):
sum += i if getDivisorCount(i) % 2 == 0 else -i
return sum
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 해야 하므로
일단 특정 숫자의 약수의 개수를 구하는 함수 getDivisorCount()
를 구현했습니다.
def getDivisorCount(n):
count = 1
for i in range(1, n // 2 + 1):
if n % i == 0:
count += 1
return count
여기서 2번 라인의 count
변수를 1로 설정한 이유는,
n의 절반까지만 나누어떨어지는지 확인하게 되면 자기 자신은 나누어떨어지는지 세지 않기 때문입니다.
자기 자신은 무조건 나누어떨어지므로 1부터 시작하도록 변수를 초기화했습니다.
def solution(left, right):
sum = 0
for i in range(left, right + 1):
sum += i if getDivisorCount(i) % 2 == 0 else -i
return sum
그 후에 left부터 right까지 반복문을 돌리면서 i 값이 짝수인지 홀수인지 판별 후 짝수라면 누적하고 홀수라면 빼도록 삼항 연산자로 구현했습니다.