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

CHOI YUN HO·2021년 5월 30일
0

알고리즘 문제풀이

목록 보기
31/63

📃 문제 설명

약수의 개수와 덧셈

[문제 출처 : 프로그래머스]

👨‍💻 해결 방법

쉽지만 재미있는 문제였다.

처음에 약수의 개수를 구하는 함수를 만들고
어떻게 효율적으로 구할 수 있을까를 고민했다.

그 결과 어차피 약수는 쌍으로 이루어져 있기 때문에
n의 약수를 구할 때 n을 1부터 루트n까지의 수로 나누어서
나누어 떨어지는 수만 약수의 개수로 센 다음, *2를 해주면 된다고 생각했다.

근데 그렇게 함수를 짜니까 약수가 같은 수의 쌍으로 이루어진 경우
그니까 4,9,16 같은 수의 경우를 예외로 처리해줘야 했다.
그래서 flag를 써가면서 함수를 수정했는데,
생각해보니 이 조건 자체로 약수의 개수가 홀수인지 짝수인지 판별이 되는거였다 ..!!!

그래서 짜던 함수를 버리고 그냥 바로 제곱근이 정수인지만 체크해서
문제를 풀어주었다.

참 재미있었다 끗!

👨‍💻 소스 코드

def GetNumYaksu(n):
    cnt = 0
    flag = False
    for i in range(1, int(n ** 0.5) + 1):
        if i * i == n:
            flag = True
        if n % i == 0:
            cnt += 1

    if flag:
        return cnt * 2 - 1
    else:
        return cnt * 2

def solution(left, right):
    answer = 0
    for n in range(left, right + 1):
        if int(n ** 0.5) == n ** 0.5:
            answer -= n
        else:
            answer += n
    return answer
profile
가재같은 사람

0개의 댓글