본문 바로가기
Online-Judge/Programmers

[Programmers] Python 약수의 개수와 덧셈

by eungbbang 2022. 6. 28.
반응형

https://programmers.co.kr/learn/courses/30/lessons/77884?language=python3 

 

코딩테스트 연습 - 약수의 개수와 덧셈

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

programmers.co.kr

 


 

def isPrimeNum(num):
    cnt = 0
    for i in range(1, num+1):
        if num % i == 0:
            cnt += 1
    
    if cnt % 2 == 0:
        return num
    else:
        return 0 - num


def solution(left, right):
    
    answer = 0
    for i in range(left, right+1):
        answer += isPrimeNum(i)
        
    return answer

 

 

 


 

그냥 단순히 약수의 개수를 구해서 풀었는데 다른 풀이를 보니 더 단순한 방법이 있었다.

 

약수의 개수가 홀수가 되는 경우는 딱 하나, 해당 수가 제곱근을 가지는 경우이다.

(제곱근: 음이 아닌 수 A에 대하여 제곱하여 A가 되는 수를 A의 제곱근이라고 한다.)

 

따라서 루트A의 소숫점을 버린 수가 루트A와 같다면 해당 수는 제곱근이다.

if int(A**0.5)==A**0.5: #이 경우 A**0.5는 A의 제곱근

 

따라서 해당 방법을 사용하면 아래와 같이 구현할 수 있다.

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
반응형

댓글