월간 코드 챌린지 시즌2 - 약수의 개수와 덧셈

hsso_o·2023년 3월 27일

코딩테스트

목록 보기
9/124
post-thumbnail

월간 코드 챌린지 시즌2 - 약수의 개수와 덧셈


💡 내 코드

def isDivisorEven(x):
    div = 0
    for i in range(1, x+1):
        if x % i == 0:
            div += 1
    
    return (True if div%2 == 0 else False)
            
def solution(left, right):
    answer = 0
    
    for i in range(left, right+1):
        isEven = isDivisorEven(i)

        if isEven:
            answer += i
        else:
            answer -= i
    
    return answer

약수 구하는 부분이 뭔가 더 좋은 방법이 있을 것만 같아서 다 풀고 다른 사람 풀이도 찾아봤는데 진짜 생각 못한 방법을 발견했다!.! 그래서 그걸로도 다시 해봤는데, 그 코드는 이따가 써야지🙈

1. 약수 개수 구해서 짝수면 True, 홀수면 False 리턴해주는 함수 만듦.
2. for문 돌면서 해당되는 숫자 하나씩 함수로 보내고 
   리턴값이 True이면 (answer + 해당 숫자), (False면 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

이게 무엇이냐 하면,, (i ** 0.5)는 i의 제곱근을 구하는 코드인데,
제곱근이 정수로 표현 가능한 수는 약수의 개수가 홀수이다!

그래서 제곱근을 구하고 제곱근에 int 씌운것과 비교해서 정수인지 아닌지 판단
-> 같으면 약수의 개수가 홀수, 아니면 짝수

이렇게 돼서 저런 코드가 나온다,,!

profile
아뇨 소혠데요-

0개의 댓글