약수의 개수와 덧셈
문제 링크
나의 풀이
def solution(left, right):
answer = []
for i in range(left, right+1):
yaksu = []
for j in range(1, i+1):
if i % j == 0:
yaksu.append(j)
if len(yaksu) % 2 == 0:
answer.append(j)
else:
answer.append(-j)
return sum(answer)
- left, right로 input된 수를 범위로 갖는 for반복문과 1부터 첫번째 for반복문 output 수 까지의 범위를 갖는 이중반복문으로 약수를 구해 yaksu 리스트 변수에 append하였다. 그리고 약수의 갯수가 짝수 혹은 홀수 일 경우를 구분하여 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
- 약수의 갯수가 홀수 개인 수는 제곱수라는 명제를 적용한 풀이이다. 좀 더 어렸을때 문제를 풀었다면 나도 생각해 낼 수 있지 않았을까 ...? 하는 생각을 해봤다. 이번 기회로 다시 기억을 떠올리고 다음 기회에 적용할 수 있도록 해보자!