코딩 테스트

(Java) 프로그래머스 약수의 개수와 덧셈

로승리 2021. 11. 20. 02:47

내 답에서 변수와 코드의 개수를 줄이는 연습을 해야겠다는 생각이 들었다.

풀 때는 쉽다는 생각이 들었는데 풀고 나서 급 반성하게 되었다.


최종 코드

import java.util.ArrayList;
import java.util.List;
class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        List<Integer> num = new ArrayList<>();
        int temp = 0;

        // 수 구해서 리스트에 저장
        while (left != right + 1) {
            num.add(left++);
        }

        for (int i = 0; i < num.size(); i++) {
            // 약수의 개수 측정 변수
            int dnum = 0;
            for (int j = 1; j <= num.get(i); j++) {
                if(num.get(i) % j == 0) {
                    dnum++;
                }
            }
            // 홀수면
            if (dnum % 2 != 0) {
                temp = num.get(i) * -1;
            }
            // 짝수면
            else {
                temp = num.get(i);
            }
            answer += temp;
        }

        return answer;
    }
}

 

다른 분 코드

class Solution {
    public int solution(int left, int right) {
       int answer = 0;
       List<Integer> num = new ArrayList<>();
       for (int i=left;i<=right;i++) {
            //제곱수인 경우 약수의 개수가 홀수
            if (i % Math.sqrt(i) == 0) {
                answer -= i;
            }
            //제곱수가 아닌 경우 약수의 개수가 짝수
            else {
                answer += i;
            }
        }
        return answer;
    }
}