Stay Hungry Stay Foolish

프로그래머스 코딩테스트/Level 1

Programmers 약수의 개수와 덧셈 (Python/Level 1)

dev스카이 2022. 7. 27. 16:56
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

두 정수 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 해야 합니다.

 

풀이

  1. left부터 right까지 반복한다.
  2. 약수의 개수를 카운트 하기 위한 변수를 0으로 초기화한다.
  3. i일 때, 해당 수의 약수를 구하기 위해 1부터 i까지 반복문을 작성한다.
  4. 약수가 맞으면 카운트 한다.
  5. 약수의 개수 카운트가 끝났으면 약수의 개수가 짝수인지 홀수인지 판단하고 answer에 i를 더하거나 뺀다.
  6. 다음, left의 다음 수도 위와 똑같이 반복한다. 

Solution

def solution(left, right):
    answer = 0
    for i in range(left, right + 1):
        cnt = 0
        for j in range(1, i + 1):
            if i % j == 0:
                cnt += 1
        if cnt % 2 == 0:
            answer += i
        else:
            answer -= i
    return answer

Another Solution

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