Algorithm/프로그래머스

[프로그래머스] Level1) 약수의 합

햄습햄 2021. 10. 21. 13:55

문제 설명

 

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

 

 

제한 조건

 

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

 


풀이 과정 (자바)

 

정수 n을 임의의 수 i로 나눴을 때, 나머지가 0이라면 i는 정수 n의 약수라고 판단했다.

 

입력받은 n까지 for문을 돌렸고,

n을 1부터 나눠 나머지가 0일 때, answer에 더했다.

for문이 끝나고 answer를 반환했다.

 

 

결과

 

 


다른 사람의 풀이

 

입력받은 n의 절반까지 for문을 돌렸다.

그리고 n을 1부터 나눠 나머지가 0일 때, answer에 더했다.

for문이 끝나고 answer에 n을 더해 반환했다.

 

더보기

n이 12일 때,

약수는 각각 1, 2, 3, 4, 6, 12가 된다.

 

이때, 12 / 2 라면 6이 되고,

for문은 6까지 돌리면 된다.

 

answer에 n 값이 들어가지 않았으므로, 

return 하기 전에 answer에 n을 더해 반환한다.

 

/*

1을 제외하고, 나올 수 있는 약수 중 가장 작은 수는 2가 된다.

그러므로 2로 나누면,

2와 함께 나올 수 있는 약수 n/2 (여기선, 6)가 n을 제외한 가장 큰 약수가 된다.
*/

 

 

기타

 

기존하고 다른 건 입력받은 수 한 번만 더하는 것이다.

굳이 끝까지 for 문을 돌리지 않고, 횟수를 많이 줄일 수 있어 효율적이라고 느꼈다.

앞으로 좀 더 효율적인 코드를 작성하도록 노력해야겠다.