✔ 약수의 개수와 덧셈
문제 분석하기
각 숫자마다 약수를 구한 후,
약수의 개수가 짝수일 경우와 약수의 개수가 홀수일 경우를 계산하여 더하거나 빼도록 함
손으로 풀어보기
- left에서부터 right까지의 모든 수들의 약수의 개수를 계산
- 약수의 개수가 짝수일 경우 더하고, 홀수일 경우는 빼도록 하여 결과를 반환
슈도코드 작성하기
left, right(두 정수)
answer(수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수)
for (i -> left부터 right까지) {
count(약수의 개수)
for(j -> 1부터 i의 제곱근까지) {
if (j * j == i)
count += 1
else if (i % j == 0)
count += 2
}
if (약수의 개수가 짝수라면)
answer += i
else
answer -= i
}
answer 반환
코드 구현하기
/**
* 77884) 약수의_개수와_덧셈
*/
public class L049_77884 {
// left, right(두 정수)
public int solution(int left, int right) {
// answer(수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수)
int answer = 0;
for (int i = left; i <= right; i++) {
// count(약수의 개수)
int count = 0;
// 약수의 개수 구하기
for (int j = 1; j <= Math.sqrt(i); j++) {
if (j * j == i)
count += 1;
else if (i % j == 0)
count += 2;
}
// 약수의 개수가 짝수라면
if (count % 2 == 0)
answer += i;
// 약수의 개수가 홀수라면
else
answer -= i;
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L049_77884 solution = new L049_77884();
int left = 13;
int right = 17;
int result = solution.solution(left, right);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[12901] 2016년 (0) | 2023.12.25 |
---|---|
[77484] 로또의 최고 순위와 최저 순위 (0) | 2023.12.19 |
[81301] 숫자 문자열과 영단어 (0) | 2023.12.19 |
[82612] 부족한 금액 계산하기 (0) | 2023.12.18 |
[86051] 없는 숫자 더하기 (0) | 2023.12.18 |