프로그래머스 소수 찾기 문제를 풀고 있는데,
문제 링크
문제풀이를 위해서 필요하다고 생각한 건,
받은 문자열로 만들어낼 수 있는 수(순열)
그리고 그 수가 소수인지 알아내기 위한, 소수 리스트
물론 그 수가 소수인지 아닌지만 판단하면 되겠지만,
특정 수보다 작은 소수의 배열을 찾아내는 것도 중요하기에 공부해봤다.
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인 값들만 찾아내면 소수를 얻을 수 있다.
에라토스테네스의 체의 원리를 이용한 소수찾기 알고리즘이다.