level1_약수의 개수와 덧셈

2024. 2. 1. 22:50파이썬_알고리즘(코딩테스트)/level1

 

 

내가 제출한 코드

def solution(left, right):
    answer = 0
    for i in range(left, right+1):
        count = 0
        for j in range(1,i+1):
            if i % j == 0:
                count += 1
        if count % 2 == 0: # count가 짝수이면
            answer += i
        else: # count가 홀수라면
            answer -= i
    return answer

 

 

유형이 level1에서 풀었던 약수의 합에서 힌트를 얻어서 코드를 짰던거 같다.

 

다른 사람이 제출한 코드

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

 

if int(i**0.5) == i ** 0.5는 약수의 개수를 판단하는 조건문이다.

- i**0.5는 i의 제곱근을 구하는 것이다.

- int(i**0.5)는 이 제곱근을 정수로 변환한다.

만약 이 두 값이 같다면, i는 완전제곱수이며 홀수 개의 약수를 가지고 있다. 

 

예를 들면 16(4*4)을 보면, 16의 약수는 1,2,4,8,16이다. 여기서 4는 자기 자신과 쌍을 이루기 때문에 한 번만 계산되고

완전 제곱수는 홀수 개의 약수를 가진다.