🚩 문제 설명
◾ 1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하는 문제이다.
◾ 간단한 덧셈 문제에 해당한다.
📑 문제 풀이
//20200102 오일러 알고리즘 Problem 1
#include <stdio.h>
#define MAX 1000
int main(void)
{
int num = 1; //정수 초기화
int cnt = 1; //카운트 초기화
int sum3=0, sum5=0, sum15=0; //3의배수, 5의배수, 15의배수
int SUM = 0; //총 합계
// 3의배수 합 구하기
while (num < MAX)
{
num = 3;
num *= cnt;
if (num >= MAX)
break;
//printf("num: %d\n", num);
sum3 += num;
//printf("sum3: %d\n", sum3);
cnt++;
}
// 5의배수 합 구하기
cnt = 1;
num = 0;
while (num < MAX)
{
num = 5;
num *= cnt;
if (num >= MAX)
break;
//printf("num: %d\n", num);
sum5 += num;
//printf("sum5: %d\n", sum5);
cnt++;
}
// 15의배수 합 구하기
cnt = 1;
num = 0;
while (num < MAX)
{
num = 15;
num *= cnt;
if (num >= MAX)
break;
//printf("num: %d\n", num);
sum15 += num;
//printf("sum5: %d\n", sum15);
cnt++;
}
printf("sum3: %d\n", sum3);
printf("sum5: %d\n", sum5);
printf("sum15: %d\n", sum15);
SUM = sum3 + sum5 - sum15;
printf("\nSUM: %d", SUM);
return SUM;
}
👉 (3의 배수의 합) + (5의 배수의 합) - (최소공배수 15의 배수의 합)
◾ 각각 3의 배수, 5의 배수의 합을 구했다.
◾ 그들의 최소공배수인 15의 배수 합도 구해준다.
◾ 1000보다 작은 수 이므로 MAX라는 상수에 1000을 넣어뒀다.
◾ cnt를 1 씩 더해가면서 각각의 수들과 곱해준다.
◾ 그 다음 sum에 더해준다.
but ,
✅ for문과 if문을 이용하여 간단하게 끝낼 수 있었을 것임.
✅ 만약 3과 5로 나누어 떨어진다면 더하는 수식을 사용했어도 좋았을듯.
알고리즘을 시작하는 단계이고 처음 푸는 문제라서 부족한 점이 많다.
차차 발전해나가자.
➕ Solution 풀이 사이트 첨부
https://www.mathblog.dk/project-euler-problem-1/
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > etc' 카테고리의 다른 글
Problem #006 (0) | 2020.01.21 |
---|---|
Problem #005 (0) | 2020.01.20 |
Problem #004 (0) | 2020.01.16 |
Problem #003 (0) | 2020.01.08 |
Problem #002 (0) | 2020.01.07 |