문제
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
코드
def solution(left, right):
answer = 0
num = [i for i in range(left, right+1)]
for n in num:
if n**0.5 == int(n**0.5):
answer -= n
else:
answer += n
return answer
풀이
약수는, 어떤 수를 나누어 떨어지게 하는 수를 말한다.
예를 들어 12의 약수는 1, 2, 3, 4, 6, 12가 되고, 각각 쌍을 이루어 1*12 / 2*6 / 3*4 = 12 를 만족하게 된다.
그렇다면 약수의 개수가 홀수라는 뜻은 그 수가 제곱근 정수를 갖고 있다는 말이 된다.
36의 경우 약수는 1, 2, 3, 4, 6, 9, 12, 18, 36이고, 1*36 / 2*18 / 3*12 / 4*9 = 36 는 쌍을 이루지만, 6*6은 자기자신을 제곱했을 때 36이 된다.
따라서 수의 제곱근이 정수인지 판별함으로써 문제를 해결할 수 있다.
-> n**0.5 == int(n**0.5) 만족하는 경우
'👩🏻💻 Front-end > 👾 Algorithm' 카테고리의 다른 글
프로그래머스 - 소수 찾기 (Python) (0) | 2022.06.23 |
---|---|
프로그래머스 - 메뉴 리뉴얼 (Python) (0) | 2022.06.11 |
프로그래머스 - 행렬 테두리 회전하기 (Python) (0) | 2022.06.11 |
프로그래머스 - 타겟 넘버 (Python) (0) | 2022.06.09 |
프로그래머스 - 오픈채팅방 (Python) (0) | 2022.06.08 |