두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
1 ≤ left ≤ right ≤ 1,000
다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
def solution(left, right):
answer = 0
for i in range(left, right + 1): # left ~ right까지를 반복한다.
tes = 0
for a in range(1, i + 1): # 약수의 개수를 구하는 반복문
if i % a == 0:
tes += 1
if tes % 2 == 0:
answer += i
else:
answer -= i
return answer
print(solution(13, 17)) # 43
print(solution(24, 27)) # 52
해당 코드는 반복문과 조건문을 조합하였으며 첫번째 반복문은 13 ~ 17까지 반복을 하도록 하였고, 다음 반복문은 약수의 개수를 구하도록 하였다.
이후 구해지는 약수의 개수를 통해서 조건문을 이용하여 tes의 값이 짝수의 경우 더하고, 홀수의 경우 빼도록 함으로써 answer의 값이 구해진다.
해당 코드를 짜기 위해서 알아야 했던 것이 2가지가 있다.
약수의 개수를 구하는 것과 그 약수의 개수를 통해서 answer의 값을 구하는 것이다.
약수의 개수를 구하는 코드를 만들고 최종적인 answer의 값을 구하는 공식을 세우기까지 많은 시간이 걸렸다.
tes = 0의 위치와 두번째 (answer의 값을 구하는)조건문의 위치를 설정하는 구간에서 많은 실수가 있었으며 이를 통해서 for문과 if문을 적절한 부문에 설정할 수 있도록 추가적인 복습이 필요하다.