코딩세상
Programmers 코딩테스트 연습 LV 1 - 나누어 떨어지는 숫자 배열 본문
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입출력 예leftrightresult
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 해야 합니다.
입출력 예 #2
- 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
24 | 1, 2, 3, 4, 6, 8, 12, 24 | 8 |
25 | 1, 5, 25 | 3 |
26 | 1, 2, 13, 26 | 4 |
27 | 1, 3, 9, 27 | 4 |
- 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
def solution(left, right):
answer = 0
add_divisor = []
for i in range(left, right+1):
for j in range(1, i+1):
if i%j == 0:
add_divisor.append(j)
if i == j :
if len(add_divisor) % 2 == 0:
answer += i
else :
answer -= i
add_divisor.clear()
return answer
[코드 설명]
이 문제는 풀면서 많은 생각을 하게 된 문제였습니다. 이중 for문을 사용하여 left와 right사이의 값이 증가하면서 값을 1부터 i+1의 범위 까지 계산되게 하였습니다.
그리고 조건문을 사용하여 i를 j로 나눴을 때의 나머지가 0일 경우 add_divisor라는 빈 배열에 .append()함수를 사용하여 값을 추가해주었고, 만약 값이 증가하여 i와 j의 값이 같아졌을 때 이때 if 문 내부에 조건문을 추가하여 만약 배열의 길이가 짝수일 경우에는 변수 answer에 더해주고, 홀수일 경우 변수 answer에 해당 값을 빼주는 조건을 설정하였습니다.
그리고 해당 조건을 통과하고 나서 변수에 이전에 저장된 값들이 초기화 되어야하므로 .clear()함수를 사용하여 변수를 초기화 시켜주었습니다.
'Prgrammers 문제풀이 > Python' 카테고리의 다른 글
Programmers 코딩테스트 연습 LV 1 - 가운데 글자 가져오기 (0) | 2023.09.18 |
---|---|
Programmers 코딩테스트 연습 LV 1 - 나누어 떨어지는 숫자 배열 (0) | 2023.09.17 |
Programmers 코딩테스트 연습 LV 1 - 두 정수 사이 합 (0) | 2023.09.17 |
Programmers 코딩테스트 연습 LV 1 - 문자열 내 p와 y의 개수 (0) | 2023.09.17 |
Programmers 코딩테스트 연습 LV 1 - 서울에서 김서방 찾기 (0) | 2023.09.12 |
Comments