https://programmers.co.kr/learn/courses/30/lessons/12928
풀이
간단하게 숫자의 절반까지만 for문을 돌리는 방법으로 풀었다.
12의 경우 약수가 1,2,3,4,6,12이므로 6까지 돌려서 더하고 마지막에 12를 더해서 return하면된다.
class Solution {
public int solution(int n) {
int answer = 0;
for (int i=1;i<n/2;i++){
if(n%i==0){
answer += i;
}
}
return answer+n;
}
}
+ 다른방법!
사실 처음에는 소수의 합 문제를 풀 때랑 비슷하다고 생각해서 1부터 입력받은 루트n까지의 수(약수의 중심)까지만 반복해 나머지가 0일때 나눈 수와 몫을 answer에 더했다.
그랫더니 정확도가 85정도밖에 안나와서 실패. n이 16같이 i*i==n인경우를 고려하지 않았기 때문이다.
따라서 i*i==n인 경우에는 answer에 i만 더해준다.
class Solution {
public int solution(int n) {
int answer = 0;
for (int i=1;i*i<=n;i++){
if(n%i==0){
if(i*i==n) answer +=i;
else answer += i+(n/i);
}
}
return answer;
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 : 나누어 떨어지는 숫자 배열 (0) | 2022.01.31 |
---|---|
[JAVA] 프로그래머스 : 자릿수 더하기 (0) | 2022.01.21 |
[JAVA] 프로그래머스 : 정수 제곱근 판별 (0) | 2022.01.21 |
[JAVA] 프로그래머스 : 소수찾기 (0) | 2022.01.21 |
[JAVA] 프로그래머스 : 최대공약수와 최소공배수 (0) | 2022.01.21 |