약수의 개수와 덧셈

문제

 


나의 생각 

 

반복문의 시작값을 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