알고리즘/알고리즘 풀이

프로그래머스_약수의 합 JAVA

데부한 2025. 1. 27. 03:35
반응형

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

이번 문제는 '약수의 합'이다. 

그리고, 과거에 풀었던 문제라 과거 코드가 남아있었다.

 

과거 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        int temp = 0;
        
        for(int i = 1; i <= n; i++) {
            if(n % i == 0) {
                temp = n / i;
                if(temp < i) break;
                if(temp == i) answer += i;
                else answer += i + temp;
            }
        }
        return answer;
    }
}

이번의 과거 코드 역시 마음에 들지 않는다..

에라토스테네스의 체를 사용할까하다가 뭔가 비효율적인 것 같아서 

핵심 코드 내용만 조금 가져와서 수정했다.

 

현재 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i = 1; i <= Math.sqrt(n); i++) {
            if(n % i == 0) {
                answer += i;
                if(i != n / i) answer += n / i; 
            }
        }
        
        return answer;
    }
}

일단 제일 뵈기 싫은 for문의 조건부터 수정했다.

에라토스테네스의 체를 구현했을때처럼 Math.sqrt(n)을 사용해서 for문 반복 횟수를 줄였다.

그리고 i로 나눈 값이 0일 때.. 즉, 약수일 때 i의 값이 n/i한 값과 같지 않으면

그 수 또한 약수이니 answer에 그 값을 더해줬다.

 

오늘도 즐거운 코딩...!

반응형