발자취
[프로그래머스 Lv.1 / C언어] Day3. 약수의 합 본문
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을 더해주었다.

정답!
정보처리기사 실기 시험 공부할 때 많이 마주쳤던 코드라 괜히 반가웠다 ^_^
'코딩테스트 > Daily Coding (C, C++)' 카테고리의 다른 글
| [백준 / C언어] Day6. 괄호 (9012) (0) | 2024.05.23 |
|---|---|
| [백준 / C, C++] Day5. 제로 (10773) (0) | 2024.05.22 |
| [백준 / C, C++] Day4. 스택 2 (28278) (0) | 2024.05.21 |
| [프로그래머스 Lv.1 / C언어] Day2. 문자열을 정수로 바꾸기 (0) | 2024.05.19 |
| [프로그래머스 Lv.1 / C++] Day1. 문자열 내 p와 y의 개수 (0) | 2024.05.18 |