Algorithm/Algorithm Practice
프로그래머스 -2 약수의 합(Java)
GrapeMilk
2020. 2. 16. 14:49
문제 설명
정수 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은 다시 계산하지 않게 하는 코드를 새로 짜보자)