본문 바로가기
코딩테스트/프로그래머스 1단계

프로그래머스 1단계 - 소수 찾기

by SICDev 2021. 5. 3.
반응형

https://programmers.co.kr/learn/courses/30/lessons/12921

 

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

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

programmers.co.kr

 

import java.util.*;

//1~n까지 모든 수를 n이하의 수로 나눴더니...시간초과가 나왔다..
//알아보니 에라토스네테스의 체 라는것이 있엇다..!
class Solution {
  public int solution(int n) {
    int answer = 0;
    //n+1만큼 배열을 생성한다
    boolean[] sosu = new boolean[n + 1];
    //2의배수 3의배수 4의배수 .... 를 false로 만든다
    //true면 소수가아니고 false면 소수다
    //boolean의 초기값음 false이기때문에
    //처음에 2는 false기때문에 count를 1개 올리고 뒤의 2의 배수들을 true로 만든다.
    //그다음 3은 false기때문에 count를 1개 올리고 뒤의 3의 배수들은 true로 만든다.
    //그다음 4는 true기때문에 count를 올리지않고 4의 배수들을 true로 만든다
    //이렇게 n까지 반복...
    for (int i = 2; i <= n; i++) {
        //checked[i]가 소수면 + 시킨다.
        if (!sosu[i]){
            answer++;
        }
        for (int j = i; j <= n; j += i) {
            if (!sosu[j]){
                sosu[j] = true;
            }
        }
    }      
  return answer;
  }
}
반응형