발자취

[프로그래머스 Lv.1 / C언어] Day3. 약수의 합 본문

코딩테스트/Daily Coding (C, C++)

[프로그래머스 Lv.1 / C언어] Day3. 약수의 합

해린 2024. 5. 20. 01:46

2024. 05. 20 - 코딩테스트 스터디 Day3

 

 

01. 문제 설명

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

 

 

02. 제한 사항

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

 

 

03. 입출력 예

n return
12 28
5 6

 

 

04. 풀이 및 답

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

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

    return answer;
}

약수는 어떤 수를 나눴을 때 나머지가 0인 수를 의미한다.

모든 수는 1과 자기 자신을 무조건 약수로 가진다는 특성이 있다.

 

n은 자기 자신을 제외하고 약수로 가질 수 있는 수 중 가장 큰 수는 n/2이다.

즉, n은 자기 자신을 제외하고 n/2보다 큰 수는 약수로 가질 수 없다.

따라서 i가 1일 때부터 n/2가 될 때까지 반복하도록 코드를 작성하였다.

반복문을 돌면서 n을 i값으로 나눴을 때 나머지가 0이면 i값을 answer에 더하도록 만들었다.

 

반복문을 빠져나온 후에는 마지막으로 자기 자신인 n을 더해주었다.

 

 

정답!

 

 


정보처리기사 실기 시험 공부할 때 많이 마주쳤던 코드라 괜히 반가웠다 ^_^