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

약수의 합을 구하는 함수를 만드는 문제입니다

 

문제 설명

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

 

제한 사항

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

 

입출력 예시

입력 출력
12 26
5 6
0 0

입출력 예 #1

12의 약수는 1,2,3,4,6,12입니다 → 이를 모두 더하면 28입니다

입출력 예 #2

5의 약수는 1,5입니다 → 이를 모두 더하면 6입니다

입출력 예 #3

0의 약수는 없습니다→ 따라서 값은 0이 출력됩니다

 

Solution

#include<iostream>

using namespace std;

int solution(int n) {
    int answer = 0;
    if(n==0) return answer; // 입력이 0일 경우 바로 return
    else{
        for(int i=1;i<=n/2;i++){ // m/2까지 나머지가 0인 약수 찾기
            if(n%i==0) answer+=i; // 해당 약수를 다 더해주기
        }
        answer+=n; // 자기 자신도 약수이므로 자신의 값도 더해주기
    }
    return answer; // 정답 return
}

→ for 함수에서 i의 반복을 n/2까지 한 이유는 2로 나누었을 때의 약수가 자기 자신을 제외하고 나올 수 있는 약수의 최대값이므로 n/2까지 반복 후 자기 자신을 더하면 반복문의 개수를 줄이면서 값을 구할 수 있어요

: 자기 자신을 제외한 약수의 최대값은 n/2의 값을 초과할 수 없다 → 반복문을 n까지 돌리지 않아도 된다

프로그래머스의 문제 하나를 풀어보면서 필요한 내용을 알려드렸습니다
다음에는 더 재밌는 문제 풀이로 돌아오겠습니다

'Problem Solving > C++' 카테고리의 다른 글

[프로그래머스] 3 x n 타일링  (3) 2023.09.21
[프로그래머스] 점 찍기  (4) 2023.09.20
되 나눔수  (0) 2023.08.01
2178번 - 미로 탐색  (0) 2023.07.24
1389번 - 케빈 베이컨의 6단계 법칙  (0) 2023.07.23