규도자 개발 블로그
[프로그래머스/Level1/파이썬3(python3)] 약수의 개수와 덧셈 본문
[프로그래머스/Level1/파이썬3(python3)] 약수의 개수와 덧셈
문제
두 정수 left
와 right
가 매개변수로 주어집니다. left
부터 right
까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
left
≤right
≤ 1,000
입출력 예
left | right | result |
---|---|---|
13 | 17 | 43 |
24 | 27 | 52 |
입출력 예에 대한 설명
입출력 예 #1
- 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 약수 약수의 개수 13 1, 13 2 14 1, 2, 7, 14 4 15 1, 3, 5, 15 4 16 1, 2, 4, 8, 16 5 17 1, 17 2 - 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
입출력 예 #2
- 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 약수 약수의 개수 24 1, 2, 3, 4, 6, 8, 12, 24 8 25 1, 5, 25 3 26 1, 2, 13, 26 4 27 1, 3, 9, 27 4 - 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
풀이
def solution(left, right):
answer = 0
for i in range(left, right+1):
divisors_list = []
for j in range(1, i+1):
if i % j == 0:
divisors_list.append(j)
if len(divisors_list) % 2 == 0:
answer += i
else:
answer -= i
return answer
설명
나는 그냥 설명에서 나온 그대로 코딩했는데 다른 사람의 풀이를 보니 제곱수(1, 4, 9, 16...)의 성질을 이용한 사람들이 많았다. "제곱수의 약수의 개수는 홀수이고 제곱수가 아닌 경우는 짝수"라는 성질이 있는데 이걸 이용해 약수의 개수를 구하는 단계에서 해당 수가 제곱수인지 아닌지 검사하는 로직을 통해 더하거나 빼는 방식이 있다.
'알고리즘 > 풀이' 카테고리의 다른 글
[해커랭크(Hackerrank)/30 Days of Code/파이썬3(python3)] Day 22: Binary Search Trees (0) | 2021.07.16 |
---|---|
[프로그래머스/Level1/파이썬3(python3)] 로또의 최고 순위와 최저 순위 (0) | 2021.07.13 |
[프로그래머스/Level1/파이썬3(python3)] 숫자 문자열과 영단어 (0) | 2021.07.12 |
[프로그래머스/Level2/파이썬3(python3)] 뉴스 클러스터링 (0) | 2021.04.13 |
[프로그래머스/Level2/파이썬3(python3)] 다음 큰 숫자 (0) | 2021.04.13 |
Comments