Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- oracle
- JavaScript
- 프로그래머스
- Spring
- kotlin
- Security
- mybatis
- 에러
- 오라클
- aws
- Git
- JPA
- Vue
- error
- 시큐리티
- Java
- 코틀린
- 자바
- 스프링
- 함수
- GitHub
- 알고리즘
- 쿼리
- db
- IntelliJ
- jquery
- 생성
- 넥사크로
- Eclipse
- 방법
Archives
- Today
- Total
송민준의 개발노트
프로그래머스-level1-소수 찾기(에라토스테네스의 체) 본문
https://programmers.co.kr/learn/courses/30/lessons/12921
소수찾기 문제이다.(자신과 1만 약수로 가지는 수)
정보처리기사에서 공부하던 문제이기에 별 문제 아니라 생각하고 풀었다.
뭐 나름 깔끔한 코드라고 생각했는데 효율성에서 통과를 못했다.(시간 초과)
고민하다가 예전에 에라토스테네스의 체라는게 기억이 나서 검색을 해봤다. 일단 밑에는 효율성 낮은 코드(돌아감)
public int solution(int n) {
int count = 1;
if(n == 2) {
return count;
}
for (int i = 3; i<= n; i++) {
for(int j = 2; j <= i-1; j++) {
if(i%j==0) {
break;
}
if(j == i-1) {
System.out.print(j+1 + " ");
count++;
}
}
}
return count;
}
에라토스테네스의 체라는건 1을 먼저 제외하고, 2부터 시작해서 2의 배수, 3의 배수, 5의 배수, 7의 배수, 소수들의 제곱근을 제거하면 남은 수들이 소수의 집합들이다.
public int solution(int n) {
int[] a = new int[n+1];
for(int i = 2; i <= n; i++) {
a[i] = i;
}
for(int i = 2; i <= n; i++) {
if(a[i] == 0) continue;
for(int j = i + i; j <= n; j+= i) {
a[j] = 0;
}
}
int count = 0;
for(int i = 2; i <= n; i++) {
if(a[i] != 0) count++;
}
return count;
}
결과를 보면 알겠지만 굉장히 빠른편이다.
에라토스테네스의 체에 대한 자세한 설명은
https://terms.naver.com/entry.nhn?cid=40942&docId=1179083&categoryId=32204
참고하면 된다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스-level1-약수의 합 (0) | 2019.11.04 |
---|---|
프로그래머스-level1-나누어 떨어지는 숫자 배열 (0) | 2019.11.04 |
프로그래머스-level1-모의고사 (0) | 2019.11.03 |
프로그래머스-level1-시저 암호 (0) | 2019.11.01 |
프로그래머스-level1-수박수박수박수박수? (0) | 2019.11.01 |