문제 설명
두 정수 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):
count = 0
for j in range(1, i+1):
if i%j == 0:
count += 1
answer = answer+i if count%2 == 0 else answer-i
return answer
풀이
이중 for문을 통해 left 부터 right까지의 수의 약수를 구하고, 그 과정에서 각 수의 약수의 개수를 의미하는 count의 수를 센다. count가 짝수면 해당하는 수를 더해주고, 그렇지 않으면 빼준다.
다른 코드와 풀이
아래의 코드는 다른 사람들이 작성한 것들로, 내 코드와 비교, 참고하기 위해 가져왔다.
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
left부터 right까지의 수를 가지고 해당 수의 약수를 구하기 위해 for문을 돌려준다. 그 과정에서 i의 제곱근을 구하는 식인 i**0.5를 이용해 그 값이 정수로 표현되는지 확인하기 위해 정수로 변환한 것과 아닌 것이 같은지 확인 후 맞다면 약수의 개수가 홀수개인 것이므로 빼주고, 아니라면 더해준다. (제곱근이 정수로 표현 가능한 수면 약수의 개수가 홀수 개라고 함)
'Coding Test' 카테고리의 다른 글
231022 부족한 금액 계산하기 - Level 1 (1) | 2023.10.22 |
---|---|
231020 문자열 내림차순으로 배치하기 - Level 1 (0) | 2023.10.20 |
231018 내적 - Level 1 (0) | 2023.10.18 |
231017 수박수박수박수박수박수? - Level 1 (1) | 2023.10.17 |
231016 가운데 글자 가져오기 - Level 1 (0) | 2023.10.16 |