N, M을 입력 받고 N~M사이 소수 중 최솟값과 소수들의 합을 구하라
1. 소수를 어떻게 찾을 것인가? 👉 % == 0
->이전 1978번과 똑같은 방법으로 나눗셈 진행 후 나머지가 0임을 이용과 반복문 사용을 통해 소수를 찾았다.이번엔 큰 틀은 N~M까지 반복문을 돌고 그 안에서 소수를 찾는 반복문을 한 번 더 사용하였다.
만약 나누어지는 숫자가 2라면 (Judge == 2)이면 소수인 것을 발견하게된다!
for (int i = N; i <= M; i++)
{
Judge = 0;
//<------소수 찾기 알고리즘------>
for (int j = 1; j <= i ; j++)
{
if ((i % j) == 0)
{
//printf("%d : 나눠짐 발견! %d\n", i, j);
Judge = Judge + 1;
}
}
2. 최솟값을 어떻게 찾을 것인가? 👉 변수 이용
최솟값을 어떻게 찾을건지에 대해서 조금 고민을 하였다. 배열 같은 공간에 모든 소수들을 모아두고 첫 번째 저장되는 인덱스를 사용할까 하는 생각도 들었는데, 어떻게든 간단한 방법으로 할 수 있을 것 같아 고민하던 도중에 변수를 이용해서 첫 번째로 찾는 소수를 킵해두기로 하였다.
소수를 찾게 되면 Count라는 변수를 ++해주게 되는데 이 Count가 1이 되는 순간 최솟값을 저장해주는 것으로 코드를 작성하였다.
if (Judge == 2)
{
Count++;
//printf("%d : 소수 발견!\n", i);
Sum = Sum + i;
//<-----최솟값 미리 저장----->
if (Count == 1)
Smallest = i;
}
반복문 안에 있는 조건문에 i,j, 변수 등을 잘못 적어서 흐름이 정상적으로 작동하지 않았다.
문제에서 요구하는 건 Sum값이 먼저 나오고 최솟값이 나와야 하는데 나는 최솟값을 먼저 출력하고 Sum을 출력해서 정답 처리가 안되었다..
이전 문제도 소수였기에 크게 어려운 문제는 아니었으나 문제에서 요구하는 정보가 무엇인지 정확하게 보고 문제를 풀어됨을 느꼈다. 사실 너무 당연한 이야기이긴하다..😓
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int N;
int M;
int Smallest = 0;
int Sum = 0;
int Judge = 0;
int Count = 0;
scanf("%d", &N);
scanf("%d", &M);
// N ~ M 까지 반복문 돌자
for (int i = N; i <= M; i++)
{
Judge = 0;
//소수 찾기 알고리즘
for (int j = 1; j <= i ; j++)
{
if ((i % j) == 0)
{
//printf("%d : 나눠짐 발견! %d\n", i, j);
Judge = Judge + 1;
}
}
if (Judge == 2)
{
Count++;
//printf("%d : 소수 발견!\n", i);
//소수를 찾음
Sum = Sum + i;
if (Count == 1)
{
Smallest = i;
}
}
Judge = 0;
}
if (Count == 0)
{
printf("-1");
}
else
{
printf("%d\n", Sum);
printf("%d\n", Smallest);
}
}