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;
return answer;
}
}
첫번째 시도
class Solution {
public int solution(int n) {
int answer = 0;
if(n == 1){
answer = 0;
}else{
for(int i = 2; i < n+1; i++){
int count = 0;
for(int j = 1; j < i+1; j++){
if(i%j == 0){
count++;
}
}
if(count == 2){
answer++;
}
}
}
return answer;
}
}
정확성 테스트 10, 11, 12 와 효율성 테스트 실패!
질문하기를 보니까 '에라토스테네스의 체'를 사용하라는데... 내일 검색해봐야겠다!
두번째 시도 (에라토스테네스의 체 적용)
class Solution {
public int solution(int n) {
int answer = 0;
int[] arr = new int[n+1];
for(int i = 0; i < arr.length; i++){
arr[i] = i;
}
arr[1] = 0;
for(int i = 2; i < arr.length; i++){
if(arr[i] == 0) continue;
for(int j = i*2; j < arr.length; j = j+i){
arr[j] = 0;
}
}
for(int i = 2; i < arr.length; i++){
if(arr[i] != 0){
answer++;
}
}
return answer;
}
}
후 드디어 성공!!!
- 에라토스테네스의 체: https://namu.wiki/w/에라토스테네스의%20체
에라토스테네스의 체 - 나무위키
임의의 자연수 n에 대해 그 이하의 소수를 찾는 가장 간단하고 빠른[2] 방법이다. 예를 들어 1~100까지 숫자 중 소수를 찾는다 하자. 일단 1부터 100까지 숫자를 쭉 쓴다. 1234567891011121314151617181920212223
namu.wiki
소수의 배수를 다 지우는 방식!
코드는 수를 배열에 넣고 소수의 배수는 0으로 만들도록 짰다.
'프로그래머스 > Lv.1' 카테고리의 다른 글
Lv.1 문자열 다루기 기본 (0) | 2022.06.04 |
---|---|
Lv.1 서울에서 김서방 찾기 (0) | 2022.05.31 |
Lv.1 수박수박수박수박수박수? (0) | 2022.05.30 |
Lv.1 문자열을 정수로 바꾸기 (0) | 2022.05.30 |
Lv.1 시저 암호 (0) | 2022.05.29 |