소수 찾기

안또니오·2022년 5월 1일
0

프로그래머스 소수 찾기 문제를 풀고 있는데,
문제 링크

문제풀이를 위해서 필요하다고 생각한 건,
받은 문자열로 만들어낼 수 있는 수(순열)
그리고 그 수가 소수인지 알아내기 위한, 소수 리스트

물론 그 수가 소수인지 아닌지만 판단하면 되겠지만,
특정 수보다 작은 소수의 배열을 찾아내는 것도 중요하기에 공부해봤다.

Boolean[] isChecked = new Boolean[maxNum];
for(int i = 0 ; i < maxNum; i++)
        {
            isChecked[i] = false;
        }
for(int i = 2 ; i * i <= maxNum; i++)
{
    if(isChecked[i-2]) continue;
    for(int j = i*i ; j<=maxNum+1 ; j+=i)
    {
        isChecked[j-2] = true;
    }
}
for(int i = 0; i < isChecked.length; i++)
        {
            if(!isChecked[i]){
                System.out.print((i+2) +", ");
                list.add(i+2);
            }
            if(i%50 == 48 ) System.out.println();
        }

주어진 수의 크기를 가진 배열을 만들고,
모두 false로 채워넣는다.

계산을 위해 i를 2로 두고,
이중 포문을 이용해 배열에서 i의 배수들을 제거한다.(true로 바꿔줌)
true인 경우 continue;

false인 값들만 찾아내면 소수를 얻을 수 있다.
에라토스테네스의 체의 원리를 이용한 소수찾기 알고리즘이다.

profile
2020. 11월 공부시작.

0개의 댓글