기록하는 공간
(프로그래머스)소수찾기 - P12921 본문
문제설명
1부터 입력받은 숫자 n사이에 있는 소수의 개수를 반환하는 함수를 만들어라.
제한조건
- n은 2이상 1000000이하의 자연수이다.
입출력 예
n | result |
10 | 4 |
5 | 3 |
코드설명
이 소수 찾기 문제는 에라토스테네스의 체를 사용하여 문제를 풀면 쉽게 풀 수 있다.
소수를 판별하기 위해 boolean배열을 만든다.
0과 1은 소수가 아니므로 true로 초기화해준다.
boolean[] prime = new boolean[n + 1];
prime[0] = prime[1] = true;
for문을 사용해 prime의 길이의 제곱근만큼 반복문을 실행한다.
for (int i = 2; i <= Math.sqrt(prime.length); i++) {
}
이미 체크된 배열이면 다음 반복문으로 스킵해준다.
if(prime[i]) continue;
아래 코드의 의미는 i의 배수들을 걸러주기 위한 반복문이다.
true는 소수가 아니고, false는 소수이다.
for (int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
이 반복문이 끝나면 prime배열에 false인 것만 answer을 증가시켜준다.
for (int i = 0; i < prime.length; i++) {
if (!prime[i]) {
answer++;
}
}
코드
public class P12921 {
public int solution(int n) {
int answer = 0;
boolean[] prime = new boolean[n + 1];
prime[0] = prime[1] = true;
for (int i = 2; i <= Math.sqrt(prime.length); i++) {
if (prime[i]) {
continue;
}
for (int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
}
for (int i = 0; i < prime.length; i++) {
if (!prime[i]) {
answer++;
}
}
return answer;
}
}
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
(프로그래머스) 귤 고르기 - P138476 (0) | 2023.06.28 |
---|---|
(프로그래머스)다음 큰 숫자 - P12911 (0) | 2023.04.07 |
(프로그래머스)짝지어 제거하기 - P12973 (0) | 2023.04.04 |
(프로그래머스)영어 끝말잇기 - P12981 (0) | 2023.04.03 |