문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net

기존 풀이 코드
바로 시간 초과가 출력됨, 기존 방식으로는 해결이 불가능
에라토스테네스의 체를 사용해야지 문제가 원하는 시간복잡도에 맞출 수 있을거라고 찾음
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
var list = PrimeGenerator(3, 16);
foreach (var i in list)
{
Console.WriteLine(i);
}
}
static IEnumerable<int> PrimeGenerator(int start, int end)
{
for (int i = start; i <= end; i++)
{
if (IsPrime(i))
{
yield return i;
}
}
}
static bool IsPrime(int n)
{
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
}
풀이 코드
기존 풀이 + 에라토스테네스 + StringBuilder를 조합해서 풀이를 진행함
list를 이용해서 소수 값을 출력하려고 하니 시간 초과가 출력되어서 다른 글을 참고해서 StringBuilder로 담아서 출력하니 시간초과가 뜨지 않고 정상적으로 해결됨 (해당 부분은 공부가 더 필요해보임)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
var input = Console.ReadLine().Split();
Int32.TryParse(input[0], out int start);
Int32.TryParse(input[1], out int end);
bool[] isPrime = Enumerable.Repeat(true, end + 1).ToArray();
for (int i = 2; i * i <= end; i++)
{
if (isPrime[i])
{
for (int j = i * i; j <= end; j += i)
{
isPrime[j] = false;
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = Math.Max(2, start); i <= end; i++)
{
if (isPrime[i])
{
sb.AppendLine(i.ToString());
}
}
Console.Write(sb.ToString());
}
}
함께 읽으면 좋은 글
[프로그래머스 Programmers] 소수 찾기
문제 설명 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 사
jettstream.tistory.com
참고 사이트
백준 C# - 1929 +) 에라토스테네스의 체
풀이 처음에 1978과 같은 형식으로 문제를 풀었는데 계속 시간초과가 나왔다. 백준 C# - 1978 +) 풀이 풀이 소수 찾기 문제이다. 소수는 1과 자기 자신 만을 약수로 가지는 수이다. 01 1은 소수가 아니
code-piggy.tistory.com
'프로그래밍 > Algorithm' 카테고리의 다른 글
[백준 BAEKJOON] 11653번 소인수분해 (0) | 2024.02.22 |
---|---|
[프로그래머스 Programmers] 소인수분해 (0) | 2024.02.22 |
[백준 BAEKJOON] 16916번 부분 문자열 (0) | 2024.02.19 |
KMP 문자열 탐색 알고리즘 (0) | 2024.02.19 |
[백준 BAEKJOON] 2557번 Hello World (0) | 2024.02.16 |
댓글