[Programmers] - 약수의 개수와 덧셈

오동훈·2021년 7월 28일
0

Programmers

목록 보기
47/64
post-thumbnail

1. Problem 📃

📚 출처 - 프로그래머스

문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

입출력 예

leftrightresult
131743
242752

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
약수약수의 개수
131, 132
141, 2, 7, 144
151, 3, 5, 154
161, 2, 4, 8, 165
171, 172
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
약수약수의 개수
241, 2, 3, 4, 6, 8, 12, 248
251, 5, 253
261, 2, 13, 264
271, 3, 9, 274
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

2. Logic 👨‍🏫

  1. 기본적으로 약수는 자기 자신을 제외하면 1/2 이후로 검사 할 필요가 없다.
  2. 따라서 약수의 개수를 체크하고 문제의 조건대로 홀수이면 -, 짝수이면 + 해줌으로써 계산해준다.

3. Code 💻

1. 내가 푼 코드

def measure(num):
    cnt = 1
    i = 1
    while (i < num//2 + 1):
        if num % i == 0:
            cnt += 1
        i += 1
    return cnt

def solution(left, right):
    answer = 0
    while left <= right:
        if measure(left) % 2:
            answer -= left
        else:
            answer += left
        left += 1
    return answer

2. 다른 사람이 푼 코드

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

4. Feedback 📚

다른 사람이 푼 코드를 참고하면서 새로운 것을 발견했다.

제곱근 숫자의 약수의 개수는 홀수이고, 그렇지 않으면 짝수개이다.

profile
삽질의 기록들🐥

0개의 댓글