두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ left ≤ right ≤ 1,000
입출력 예
left right result
13 17 43
24 27 52
처음 풀이:
def solution(left, right):
answer = 0
for i in range(left , right+1):
for j in range(1, i//2+1) :
i = -i if j**2 == i else i
answer += i
return answer
i) left부터 right까지의 모든 수들 = for loop
ii) 약수의 개수 구하기
ii-1)약수의 개수가 짝수인 수는 더하고
ii-2)약수의 개수가 홀수인 수는 빼기
테스트케이스 하나가 통과가 되지 않아서 계속 고민하다가
질문하기에 있는 힌트가 제곱수는 홀수의 약수개수만 가진다는 말이 있어서
다시 풀어봤는데 그래도 그 하나가 통과가 안됐다
마지막풀이:
def solution(left, right):
answer = 0
#iterate i from left to right
for i in range(left, right+1):
#To find perfect square
if int(i**0.5) ** 2 == i:
#if i is perfect square - odd num of divisors
answer -= i
##if not, even num of divisors
else:
answer += i
return answer
그래서 찾은 게 완전제곱수 찾기
처음에 i//2만 생각하다가 9를 여기 대입해보면 4가 나와서 int(i**0.5)로 바꿨다
안녕하세요, 99클럽 그룹 리더 은딩입니다!
풀이가 자세해서 저도 공부가 됐습니다 감사합니다~
추가적으로 벨로그는 마크다운이라 코드 작성하실 때
백틱 3개 뒤에 python 적으면 색 표시 돼서 코드가 더 눈에 잘 들어올 것 같습니다~
앞으로도 힘내서 매일 TIL 도전해 보세요! 화이팅입니다 :)
99클럽 https://bit.ly/3TN5TBL