프로그래머스 소수 찾기 [Java]
문제출처
https://programmers.co.kr/learn/courses/30/lessons/12921
코딩테스트 연습 - 소수 찾기
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상
programmers.co.kr
class Solution {
public int solution(int n) {
int answer = 0;
boolean[] prime_checks = new boolean[n + 1]; //true : 소수 아님 false : 소수
prime_checks[0] = true;
prime_checks[1] = true;
for(int i = 2; i * i <= n; i++){
if(!prime_checks[i]){
for(int j = i * i; j <= n; j += i){
prime_checks[j] = true;
}
}
}
for(boolean prime_check : prime_checks){
if(!prime_check) {answer++;}
}
return answer;
}
}
평소에 소수 구하는 방식으로 했더니 시간초과로 통과하지 못 해서 에라토스테네스의 체 개념을 알게 됐다.
기본적인 개념은
소수의 배수가 되는 수를 지워나가는 방식이다.
i * i를 기준으로 삼는 이유는
숫자 n이 p*q로 표현될 때 한 수는 항상 n^(1/2)이하, 다른 한 수는 n^(1/2) 이상이기 때문에 모든 수를 조사할 필요 없이 i*i <= n까지만 검사하면 된다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
프로그래머스 오픈채팅방 [Java] (0) | 2022.05.05 |
---|---|
프로그래머스 124 나라의 숫자 [Java] (0) | 2022.05.05 |
프로그래머스 [1차] 다트 게임 [Java] (0) | 2022.03.17 |
프로그래머스 [1차] 비밀지도 [Java] (0) | 2022.03.16 |
프로그래머스 부족한 금액 [Java] (0) | 2022.03.08 |