[프로그래머스] 약수의 개수와 덧셈

Hyun·2023년 6월 29일
0

프로그래머스

목록 보기
28/32

문제 설명

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

제한사항
1 ≤ left ≤ right ≤ 1,000
입출력 예
left: 13, right: 17, result: 43

문제 풀이

약수의 개수를 구해서 홀수인지 짝수인지 판단

def solution(left, right):
    answer=0
    for i in range(left, right+1):
        c = 0
        for j in range(1, int(i**(1/2))+1):
            if i%j == 0:
                c = c+1 if j == i**(1/2) else c+2
        answer = answer+i if c%2==0 else answer-i
    return answer

개선한 풀이
약수의 개수가 홀수인 수는 무조건 제곱수이다. 그리고 제곱수의 제곱근은 무조건 정수이다.

따라서 일일이 약수의 개수를 구할 필요가 없이 제곱수인지만 판단하면 된다.(단일 for문으로 풀 수 있다니...)

def solution(left, right):
    answer=0
    for i in range(left, right+1):
        if i**(0.5)==int(i**(0.5)): # 제곱수인지 판단
            answer-=i
        else:
            answer+=i
    return answer
profile
better than yesterday

0개의 댓글