본문 바로가기
Coding Test

231019 약수의 갯수와 덧셈 - Level 1

by mmm- 2023. 10. 19.

문제 설명

두 정수 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를 이용해 그 값이 정수로 표현되는지 확인하기 위해 정수로 변환한 것과 아닌 것이 같은지 확인 후 맞다면 약수의 개수가 홀수개인 것이므로 빼주고, 아니라면 더해준다. (제곱근이 정수로 표현 가능한 수면 약수의 개수가 홀수 개라고 함)