문제
코드
class Solution {
public int solution(int left, int right) {
int answer = 0;
int count = 0;
for (int i = left; i <= right; i++) {
for (int j = 1; j <= i; j++) {
if (i % j == 0) {
count++;
}
}
if (count % 2 == 0) {
answer += i;
}
else {
answer -= i;
}
count = 0;
}
return answer;
}
}
설명
1. 변수 선언
- 정답을 위한 변수 선언을 위해 int 타입의 answer 정의 후 0으로 초기화
- 약수의 개수를 담기 위한 변수 선언을 위해 int 타입의 count 정의 후 0으로 초기화
2. for문을 통해 시작을 left, 마지막을 right로 설정
3. 약수 구하기 알고리즘
// ex) i가 10일때
10 % 1 == 0
10 % 2 == 0
10 % 3 == 1
10 % 4 == 2
10 % 5 == 0
10 % 6 == 4
10 % 7 == 3
10 % 8 == 2
10 % 9 == 1
10 % 10 == 0
// % j 했을 때 0이 되는 값의 개수 = 4개
// 즉, 약수는 4개
- 위와 같이 left부터 right의 수를 구하기 위해서 for문을 통해 j가 1일때부터 i일때까지 나누었을 때 0이 되는 값을 count로 카운트
4. 이중 for문을 빠져나와 count가 짝수일 때 조건에 맞게 answer에 i를 더하고 홀수일 때에는 빼줌
5. 다음 약수를 카운트를 위해 다시 0으로 초기화
6. answer를 return해줌
'알고리즘' 카테고리의 다른 글
[알고리즘] 자료구조 해시테이블 | 체이닝 vs 오픈 어드레싱 차이 (0) | 2025.03.13 |
---|---|
[알고리즘] 실무에 바로 쓰이는 알고리즘 by Python | 파이참 자동완성 끄기 (1) | 2025.02.04 |
[알고리즘] 프로그래머스 lv.1 문자열 내림차순으로 배치하기 자바 (1) | 2024.10.04 |
[알고리즘] 프로그래머스 핸드폰 번호 가리기 | 자바 문자열 길이 구하기 | 자바 문자열 접근 (0) | 2024.09.12 |
[알고리즘] 프로그래머스 Lv.1 두 정수 사이의 합 (0) | 2024.08.26 |