Algorithms/- 프로그래머스

프로그래머스 - 약수의 개수와 덧셈 [자바]

자굿 2022. 1. 31. 01:47
 

코딩테스트 연습 - 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주

programmers.co.kr

정답

import java.util.*;

class Solution {
    public int solution(int left, int right) {
        int answer = 0;

        /*
            left 부터 right 까지 
            약수의 개수가 짝수 + : true
            약수의 개수 홀수 - : false
        */

        for(int i=left; i<=right; i++){
            if(divisor(i)){
                answer += i;
            }else{
                answer -= i;
            }
        }


        return answer;
    }

    private boolean divisor(int num){

        boolean even = true;
        List<Integer> numList = new ArrayList<>();

        //약수
        for(int i=1; i<=num; i++){
            if(num % i == 0){
                numList.add(i);
            }
        }

        if(numList.size() % 2 != 0){
            even = false;
        }

        return even;
    }
}

분석

  • 단순 약수의 개수를 구하는 함수를 만든 후 +, -만 해주면 됨

참고할 만한 정답

  • 수학의 원리를 적용
  • 제곱수인 경우 약수가 홀수인 특징을 이용(수학적 배경지식이 있어야 작성할 수 있다.)
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;
    }
}
반응형