티스토리 뷰

문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한 사항

  • n은 0 이상 3000이하인 정수입니다.

입출력 예

n                                                                           return

12 28
5 6

 

- 내 처음 풀이

class Solution {
  
public static int solution(int n) {
    int answer = 0;
    for (int i = 1; i <= n; i++){
    	int r1 = n / i;
    	if (r1 * i == n) {
    		answer = answer + i;
    	}
        
    }
    
   
    
    return answer;
 }

}

 - 약수의 메커니즘이란 무엇일까? 라는 고민으로 시간을 좀 날림. 그 과정에서 2의 N승의 약수의 합은, 2의 N-1승의 약수의 합 + 2의 N승이라는 기괴한 생각까지 하게됨.

 - 약수 : 어떤 수로 정수가 나누어떨어지는것, 어떤 수(n)을 또다른 수(i)로 나눴을때의 몫(ri)과, 다시 i를 곱했을 때 결과가 (n)이 나온다면 i는 그 수의 약수라고 할 수 있다. 따라서 위와 같이 코드를 짰다. 

 

 

* 다시보기

 - 내가 푼 코드 더 간단하게 할 수 있는지 확인 (i는 0부터 계속 반복하기 때문에 시간이 많이 걸릴 수 있다. 따라서 i가 약수로 판별됬을 때 ri은 다시 계산하지 않게 하는 코드를 새로 짜보자)

 

 

댓글