개발공부/코딩테스트 연습문제

[프로그래머스] 소수 찾기 (Level.1)

ku-na 2022. 1. 13. 11:12

문제 설명과 제한조건 

풀이

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

 

++

처음에는 시간 복잡도가 O(n^2) 으로 짰었다. 그랬더니 실행시간이 어마어마해지고 시간초과로 실패해서

다른 방법을 찾아봤다.

저 방법이 에라토스테네스의 체를 이용한거라나 뭐라나

 i의 배수들을 다 제외시키는 방법이었다.

그래서 조금이라도 시간을 더 줄이기 위해

class Solution {
    public int solution(int n) {
        int answer = 1;
        int[] tmp = new int[n+1];
        for(int i = 0; i<=n; i++) tmp[i] = i;
        
        for(int i = 2 ; i <= n/2; i++){
            for(int j = i * 2 ; j <= n; j += i){
                tmp[j] = 0;
            }
        }
        for(int i = 3; i <=n; i++){
            if(tmp[i] != 0) answer++;
        }
        return answer;
    }
}

n/2 까지만 반복문을 돌려봤는데 큰 차이는 안났다.