Python_약수의 갯수와 덧셈

김보람·2022년 5월 13일
0

Python

목록 보기
34/39

<문제>

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.


< 풀이 >

def solution(left, right):
    arr = []
    cnt = []
    for i in range(left, right+1):
        for j in range(1,i+1):
            if i%j == 0:
                arr.append(j)
        if len(arr) %2 == 0:
            cnt.append(i)
            del arr[:]
        elif len(arr) %2 != 0:
            cnt.append(-i)
            del arr[:]
    return sum(cnt)

<다른 풀이>

방법 1.
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
방법 2.
import math
def solution(left, right):
    answer = 0
    for i in range(left, right + 1, 1):
        sqrt = math.sqrt(i)
        if int(sqrt) == sqrt:
            answer -= i
        else:
            answer += i

    return answer
방법 3.
def solution(left, right):
    def cnt_yak(number):
        cnt = 1
        for i in range(1, number//2+1):
            if number % i == 0:
                cnt += 1
        return cnt

    answer = 0
    for i in range(left, right+1):
        cnt = cnt_yak(i)
        if cnt % 2 == 0:
            answer += i
        else:
            answer -= i
    return answer

<방법 1. 코드 설명>

int(i**0.5)==i**0.5: 부분은 약수의 갯수를 구할 때 가장 핵심적인 코드이다.

예1) 25인 경우 -> 약수: [1, 5, 25]

25를 제곱근 씌운 경우 5 도출 -> 제곱근 값이 정수형으로 나타낸 값과 같은 경우 약수의 갯수는 홀수이므로 뺀 수 도출

예2) 15인 경우 -> 약수: [1, 3, 5, 15]

15를 제곱근 씌운 경우 3.XXX 도출 -> 제곱근 값이 정수형으로 나타낸 값과 같지 않으므로, 약수의 갯수는 짝수이므로 더한 수 도출

<방법 2. 코드 설명>

sqrt = math.sqrt(i) 여기서 sqrt는 제곱근을 의미하는 것으로 i****0.5와 동일한 코드이다. 제곱근 함수라고 기억하면 된다.


profile
starry_developer

0개의 댓글