Recent Posts
Recent Comments
라떼는말이야
[프로그래머스 lv1] 약수의 개수와 덧셈 (파이썬) 본문
반응형
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입출력 예
입출력 예 설명
입출력 예 #1
- 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
- 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
입출력 예 #2
- 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
- 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
나의 풀이
def solution(left, right):
answer = 0
for i in range(left, right + 1):
if isEven(i): answer += i
else: answer -= i
return answer
def isEven(num):
return True if (num ** (1/2)) % 1 > 0 else False
이 문제의 관건은 약수의 개수가 홀수인지 짝수인지 판별하는 것이다.
가장 단순한 생각으로는 모든 약수를 구하는 것이 되겠다. 나도 처음에는 이 방식으로 시도했었다.
그러나 코드를 짜다 보니 재밌는 사실을 발견했다.
약수의 개수가 홀수인 경우는 제곱수인 경우 뿐이다.
약수는 항상 짝을 이룬다.
예를 들어 36의 약수는 [1, 2, 3, 4, 6, 9, 12, 18, 36] 인데 이는 다음과 같이 짝지어진다.
(1, 36), (2, 18), (3, 12), (4, 9), (6, 6)
그런데 제곱수의 경우 (6, 6)과 같이 같은 수의 곱으로 이루어지기 때문에 6은 약수로 한번만 세서 홀수 개가 된다.
isEven() 함수에서는 약수의 개수가 짝수인지 판별하는데 그 방법은 위에서 설명한 것과 같이 제곱근이 정수인지 확인 후 정수가 아니라면 True, 정수라면 False를 한다.
반응형
'알고리즘 > 코딩 테스트' 카테고리의 다른 글
[프로그래머스 lv2] 오픈채팅방 (파이썬) (0) | 2021.06.24 |
---|---|
[프로그래머스 lv1] 가운데 글자 가져오기 (파이썬) (0) | 2021.06.24 |
[프로그래머스 lv2] 다리를 지나는 트럭 (파이썬) (0) | 2021.06.24 |
[프로그래머스 lv2] 주식가격 (파이썬) (0) | 2021.06.24 |
[프로그래머스 lv1] 음양 더하기 (파이썬) (0) | 2021.06.23 |
[프로그래머스 lv2] 피보나치 수 (파이썬) (0) | 2021.06.23 |
[프로그래머스 lv2] 124나라의 숫자 (파이썬) (4) | 2021.06.23 |
[프로그래머스 lv2] 프린터 (파이썬) (0) | 2021.06.23 |
Comments