Notice
Recent Posts
Recent Comments
Link
제이슨의 개발이야기
[코딩테스트] 소수찾기 level 1 Java 프로그래머스 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/12921
안녕하세요! 오늘은 프로그래머스에서 소수 찾기 란 문제를 풀어봤습니다
이 문제는 level 1 이라서 굉장히 쉬울거라고 생각하고 문제를 풀어봤는대 생각보다 어려웠습니다...
개인적으로 level 2 라고 해도 전혀 이상하지 않은 문제인거같습니다
이 문제를 풀려면 꼭 알아야 하는 것이 있는대 그것은
에라토스테네스 체 입니다
에라토스테네스 체를 이용해서 문제를 풀어야 하는대
예를 들면 1~31 사이에 소수의 갯수를 찾아야 한다면
먼저 루트 31의 값을 구하면 5.xxx가 나옵니다
그래서 2~5의 배수를 빼면 그 나머지 수들은 소수에 해당하기 때문에 그 나머지만 카운트 하면 문제를 풀 수 있습니다
기본적으로 에라토스테네스 체 라는 것을 알아야 문제를 풀 수 있는것으로 보입니다 ㅠㅠ
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n | result |
10 | 4 |
5 | 3 |
public class Solution {
public int solution(int n) {
int answer =n-1;
int root=(int)Math.sqrt(n);
int [] array = new int[n+1];
for(int i = 0 ; i<=n ; i++){
if(i==2){
array[i]=-1;
}
array[i]=0;
}
for(int i=2; i<=root ; i++){
for (int j = i; j*i<=n ;j++){
array[j*i]=-1;
}
}
for(int i = 2 ;i<=n ; i++){
if(array[i]==-1){
answer--;
}
}
return answer;
}
}
728x90
반응형
'코딩테스트' 카테고리의 다른 글
프로그래머스 두개 뽑아서 더하기 월간 코드 챌린지 시즌1 (0) | 2021.08.04 |
---|---|
프로그래머스 부족한 금액 계산하기 코틀린 위클리 챌린지 1주차 (0) | 2021.08.03 |
[프로그래머스] 다리를 지나는 트럭 level 2 코틀린 (0) | 2021.06.07 |
[코딩테스트] 프로그래머스 프린터 Java level2 (0) | 2021.06.02 |
[코딩테스트] 짝지어 제거하기 Java 프로그래머스 2017 팁스타운 (0) | 2021.05.29 |