문제
나의 생각
반복문의 시작값을 left로 잡고 조건문을 right보다 작거나 같을 때로 조건을 준다 ->
이중 반복문으로 약수를 구하여 나머지가 0인 값이 있을 때 count++ 수행 ->
카운트 값이 홀수 or 짝수인가에 따라 홀수, 짝수 값 List에 저장 ->
리스트에 있는 값으로 answer 값 생성.
나의 답안
public int solution(int left, int right) {
int answer = 0;
List<Integer> aArr = new ArrayList<>();
List<Integer> bArr = new ArrayList<>();
int count = 0;
for (int i = left; i <= right; i++) {
count = 0;
for (int j = 1; j <= i; j++) {
if (i % j == 0) {
count++;
}
}
if (count % 2 == 0){
bArr.add(i);
} else {
aArr.add(i * -1);
}
}
answer += aArr.stream().mapToInt(Integer::intValue).sum();
answer += bArr.stream().mapToInt(Integer::intValue).sum();
return answer;
}
다른 답안
내 코드가 생각보다 길게 나와서 다른 답안을 한번 보았다. 여기서 사용한 Math.sqrt 는 약수를 구하는 메소드로 이중 for문을 할필요가 없는 방식으로 진행을 하고 있다.
class Solution {
public int solution(int left, int right) {
int answer = 0;
for (int i=left;i<=right;i++) {
//제곱수인 경우 약수의 개수가 홀수
if (i % Math.sqrt(i) == 0) {
answer -= i;
}
//제곱수가 아닌 경우 약수의 개수가 짝수
else {
answer += i;
}
}
return answer;
}
}
'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글
하샤드 수 (0) | 2023.02.24 |
---|---|
x만큼 간격이 있는 n개의 숫자 (0) | 2023.02.23 |
없는 숫자 더하기 (0) | 2023.02.23 |
나머지가 1이 되는 수 찾기 (0) | 2023.02.23 |
숫자 짝꿍 (0) | 2023.02.23 |