728x90
반응형
- 약수의 개수와 덧셈
문제 설명
두 정수 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 해야 합니다.
입출력 예 #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 해야 합니다.
※ 이번 문제는 이중 for문을 이용하여 풀면 쉽게 풀립니다.
i를 left부터, right까지 순회하고
j를 1부터 i까지 순회하여 i를 j로 나누어 떨어지는 수를 cnt에 증가시켜 홀수개의 약수를 가진 수인지, 짝수개의 약수를 가진 수인지 구분하면 되는 문제입니다.
class Solution {
public int solution(int left, int right) {
int answer = 0;
for(int i = left; i <= right; i++) {
int cnt = 0;
for(int j = 1; j <= i; j++) {
if(i % j == 0) cnt++;
}
if(cnt % 2 == 0) answer += i;
else answer -= i;
}
return answer;
}
}
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/java] 땅따먹기 (0) | 2021.06.11 |
---|---|
[프로그래머스/java] 로또의 최고 순위와 최저 순위 (0) | 2021.06.11 |
[프로그래머스/java] 음양 더하기 (0) | 2021.05.18 |
[프로그래머스/java] 쿼드 압축 후 개수 세기 - 분할 정복 사용 (0) | 2021.04.26 |
[프로그래머스/java] 다음 큰 숫자 (0) | 2021.03.29 |
댓글