문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입출력 예
left | right | result |
13 | 17 | 43 |
24 | 27 | 52 |
내 풀이
left 부터 right 까지의 수들의 약수의 개수를 구함
자신은 포함 되어있지 않기 때문에 길이 값에 +1을 한 후
짝수 개인지 판단을 위해 % 2 == 0을 계산
짝수이면 ls에 i를 추가하고 홀수이면 -i를 추가하여 sum값을 return
def solution(left, right):
ls = []
for i in range(left,right+1):
if (len([x for x in range(1,i//2+1) if i%x==0])+1) % 2 == 0:
ls.append(i)
else:
ls.append(-i)
return sum(ls)
다른 사람 풀이
제곱수를 제외한 모든 정수가 약수의 개수가 짝수
제곱수만 홀수 개의 약수를 가짐을 이용한 풀이
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
728x90
'코딩테스트' 카테고리의 다른 글
[프로그래머스/파이썬] 부족한 금액 계산하기 (0) | 2022.09.25 |
---|---|
[프로그래머스/파이썬] 행렬의 덧셈 (0) | 2022.09.25 |
[프로그래머스/파이썬] 문자열 다루기 기본 (0) | 2022.09.24 |
[프로그래머스/파이썬] 문자열 내림차순으로 배치하기 (0) | 2022.09.24 |
[프로그래머스/파이썬] 내적 (0) | 2022.09.23 |