[ 다먹살 ]/- Coding

[프로그래머스] 레벨1 소수찾기

엉망으로살기 2021. 7. 23. 10:32
반응형

https://programmers.co.kr/learn/courses/30/lessons/12921?language=java 

 

코딩테스트 연습 - 소수 찾기

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상

programmers.co.kr

 

기존의 방법으로 구현해봤더니 계속 시간초과가 뜨는 것을 확인한 이후로 어떤 방법을 사용해야할지 고민해보았다. 구글링 끝에 '에라토스테네스의 체'라는 방식이 있는 것을 확인해서 해결했다.

중간에 continue 부분을 제외하고도 이 문제는 정답 처리가 되었는데 아마 극단적으로 n이 증가할 경우에는 내부 for문을 타지 않는 식으로 예외처리를 해줘야할 것 같다.

(에라토스테네스의 체, 소수판별)

 

 

class Solution 
{
    public int solution(int n) 
    {
        int cnt = 0;
        int[] arr = new int[n+1];
        
        for(int i=2; i<=n; i++)
        {
            arr[i] = i;
        }
        
        for(int i=2; i*i<=n; i++)
        {
            if(arr[i]==0)
            {
                continue;
            }
            for(int j=2*i; j<=n; j=j+i)
            {
                arr[j] = 0;
            }
        }
        
        for(int i=2; i<=n; i++)
        {
            if(arr[i]!=0)
            {
                cnt++;
            }
        }
        
        return cnt;
    }
}

반응형