알고리즘

프로그래머스 - 약수의 개수와 덧셈

Heidong 2022. 7. 24. 17:29
반응형

 

 

내 풀이

public class P_40 {
	
	public static int solution(int left, int right) {
		
        int answer = 0;
        
        for(int i=left; i<=right; i++) { // 13 ~ 17
        	int cnt = 0; // 약수의 개수
        	for(int j=1; j<=i; j++) {
        		if(i % j == 0) {
        			cnt++;
        		}
        	}
        	if(cnt % 2 == 0) { // 약수의 개수가 짝수라면
        		answer += i;
        	} else {
        		answer -= i;
        	}
        }
        
        return answer;
    }

	public static void main(String[] args) {
		// 약수의 개수와 덧셈

		int left = 13;
		int right = 17;
		
		System.out.println(solution(left, right));
	}

}

 

반복문 2개를 중첩하여 풀었다.

left, right의 사이를 돌아야하는 전체 틀의 반목문과

그 사이에서 약수의 개수를 구해서 비교하는 반복문을 중첩 했다.

 

 

다른 사람 풀이

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;
    }
}

수학적 공식을 사용하여 풀이한 모습.

약수의 개수가 홀수인 수를 n이라고 했을때

n % 루트n(제곱근) 은 0이 나온다는 공식.

반응형