기존 코드j<n+1는 효율성을 통과하지 못함
j*j<n+1 이거나 j<Math.sqrt(n)을 사용 하는 부분을 보니 슬슬 수리적인 풀이가 필요한듯하다.
다른 풀이는 에라토스테네스의 체를 사용하는듯 하다.
(소수면 체크, 아니면 아닌수의 배수를 제외한뒤 남은수를 카운트)
** 너무 함수를 쪼개지 말자.
추가 : 매개변수 1이하 함수
링크 :
https://programmers.co.kr/learn/courses/30/lessons/12921
코딩테스트 연습 - 소수 찾기
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상
programmers.co.kr
import java.util.stream.IntStream;
class Solution {
public long solution(int n) {
long sum = IntStream.range(2, n + 1)
.filter(this::checkPrime)
.count();
return sum;
}
public boolean checkPrime(int n) {
if(n <= 1) return false;
for(int j=2; j*j<n+1; j++){
if(n%j==0) return false;
}
return true;
}
}
'교육 > 코테' 카테고리의 다른 글
[프로그래머스]JAVA 문자열을 정수로 바꾸기 (0) | 2022.06.28 |
---|---|
[프로그래머스]JAVA 수박수박수박수박수박수? (0) | 2022.06.28 |
[프로그래머스]JAVA 서울에서 김서방 찾기 (0) | 2022.06.28 |
[프로그래머스]JAVA 문자열 다루기 기본 (0) | 2022.06.27 |
[프로그래머스]JAVA 문자열 내림차순으로 배치하기 (0) | 2022.06.27 |