[프로그래머스 / Level 1] 약수의 개수 (파이썬)

khyojun·2022년 7월 26일
0

코테연습

목록 보기
12/21

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

📌제한 사항

  • 1 ≤ left ≤ right ≤ 1,000

📌 Solution
이번 문제도 어떻게 보면 상당히 간단한 문제이다. 그치만 여러 풀이를 보다보니 정말 생각지도 못한 방법이 있었다.

def yaksu(n):
    cnt=0
    for i in range(1, n+1):
        if n%i==0:
            cnt+=1
    return cnt

def solution(left, right): # 약수의 개수
    answer = 0
    for i in range(left, right+1):

        if yaksu(i)%2==0:
            answer+=i
        else:
            answer-=i
    return 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

위 코드와 아래 코드를 보게 되면 코드가 더 짧아지게 되었는데 주석에 작성한 것처럼 제곱수에 해당하는 모든 수들은 약수의 갯수가 무조건 홀수이다! 모든 약수들은 각각의 짝이 있는데 제곱수는 그 짝이 없으므로 홀수개가 될 수 밖에 없다!

문제 해결하며 알게 된 점

  1. 수학적인 방법으로 코드 더 줄여나가기
profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글