본문 바로가기

Algorithm/Programers - C++

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

문제

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

 

풀이

#include <string>
#include <vector>
#include <cmath>
using namespace std;

int solution(int n) {
    int answer = 0;
    
    if(pow((int)sqrt(n),2) == n) answer+= (int)sqrt(n);
    
    for(int i=1; i<sqrt(n); i++){
        if(n%i==0){
            answer += i;
            answer += n/i;
        }
    }
    return answer;
}

 

 

 


 

다른 사람 풀이

#include<iostream>
#include<cmath>
using namespace std;

int sumDivisor(int n)
{
  int sum = 0;
  for(int i=1; i<=sqrt(n); i++) if(n%i==0) { sum += i; if(n!=i*i) sum += n/i; }
    return sum;
}

int main()
{
    int testCase = 12;
    int testAnswer = sumDivisor(testCase);

    cout<<testAnswer;
}

if(n!=i*i)를 사용해 제곱수를 판별해주었다.