문제
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입력 & 출력
입출력 예
leftrightresult
13 | 17 | 43 |
24 | 27 | 52 |
풀이 과정
1. 약수를 구할 수 있는 함수를 하나 만들어주도록 한다 def로 정의하며 이것을 만들 때는 제곱근을 이용한 방식으로 하였다.
2. 1번내용을 추가적으로 설명해본다면 약수를 구할 때 for문을 한 바퀴 다 돌게 된다면 어차피 중복되는 내용을 검사하는 방식이 되므로 제시받은 n이라는 수의 제곱근까지의 숫자까지만 for문을 순회하고 이렇게 구해진 약수를 n에서 나눈 숫자도 배열에 저장하면서 약수의 배열을 구하도록 하였다.
3. 약수의 배열을 구한 후 이것의 길이를 이용하여 짝수와 홀수를 구분하고 짝수일경우에는 더하고 홀수 일 때는 빼는 로직을 추가하여 answer를 리턴하여 주면 원하는 값을 얻을 수 있다.
코드
def solution(left, right):
answer = 0
for check in range(left, right + 1):
if len(divisor_check(check)) % 2 ==0 :
answer += check
else:
answer -= check
return answer
def divisor_check(n):
divisor_list = []
for i in range(1, int(n ** (1 / 2) + 1)):
if (n % i == 0):
divisor_list.append(i)
if ((i ** 2) != n):
divisor_list.append(n // i)
divisor_list.sort()
return divisor_list
print(solution(13,17))
'Algorithm' 카테고리의 다른 글
[프로그래머스] 코딩테스트 연습2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도 (0) | 2022.08.02 |
---|---|
[프로그래머스] 코딩테스트 연습정렬 가장 큰 수 (0) | 2022.07.31 |
[프로그래머스] 코딩테스트 연습 - 나머지가 1이 되는 수 찾기 (0) | 2022.07.29 |
[프로그래머스] 코딩테스트 연습 연습문제 문자열 다루기 기본 (0) | 2022.07.28 |
[프로그래머스] 코딩테스트 연습해시 전화번호 목록 (0) | 2022.07.27 |