문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
<코드>
def solution(left, right):
answer = 0
for number in range(left, right + 1):
count = 0
for i in range(1, number + 1):
if number % i == 0:
count += 1 #약수의 개수 구하기
if count % 2 == 0: #약수의 개수가 짝수인 경우
answer += number
else:
answer -= number #약수의 개수가 홀수인 경우
return answer
<풀이과정>
-약수의 개수를 하나하나 구하고 개수가 짝수/홀수인 경우를 계산
<다른 풀이방식>
-제곱근까지의 범위만 계산하기(약수는 항상 큰 약수와 작은 약수로 짝을 이루므로)
for i in range(1, int(number**0.5) + 1):
if number % i == 0:
if i * i == number:
count += 1
else:
count += 2
- if i * i == number: 만약 i가 number의 약수일 때, i와 number / i가 같은 경우 (즉, i가 number의 제곱근인 경우)에는 두 약수가 같은 숫자이므로 count를 1만큼 증가
(예: 36의 경우, 6이 제곱근이므로 약수 6이 두 번 카운트되지 않도록 count를 1만큼만 증가) - else: count += 2: i와 number / i가 서로 다른 약수일 경우, count를 두 번 증가
(예: 36의 경우, 1과 36, 2와 18, 3과 12 등으로 쌍을 이루는 약수들)
'2024 코딩테스트 스터디' 카테고리의 다른 글
[8주_3일차] 프로그래머스-문자열 다루기 기본(Python) (0) | 2024.07.25 |
---|---|
[8주_2일차] 프로그래머스-부족한 금액 계산하기(Python) (1) | 2024.07.24 |
[7주_7일차] 백준-14500 테트로미노(Python) (1) | 2024.07.22 |
[7주_6일차] 백준-1107 리모컨(Python) (0) | 2024.07.21 |
[7주_5일차] 백준-1476 날짜 계산(Python) (1) | 2024.07.20 |