Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 와스 웹서버의 차이
- 리눅스 rwx
- 단순 반복 자동화
- 파이썬 주식
- 트레이딩 봇 만들기
- beautifulsoup
- 파이썬
- Web Server란
- pybithumb
- Python
- 프로그래머스 SQL
- JSON 형식
- 리눅스
- WAS란
- JSON특징
- JavaScript Obejct Notation
- 프로그래머스
- 리눅스 777
- 파이썬 가상환경
- 즐겨찾기가 가장 많은 식당 정보 출력하기
- BigDecimal
- WAS WebServer 차이
- 변동성 돌파전략
- string format
- Web Service Architecture
- 빗썸 API 사용
- java
- 오라클
- 프로그래머스 소수
- spring
Archives
- Today
- Total
IT 개발자_S
[프로그래머스] 소수찾기 본문
반응형
● 소수 찾기 알고리즘을 만들 수 있다.
문제 https://programmers.co.kr/learn/courses/30/lessons/12921
접근 방법
/*
1.입력값의 소수의 갯수 찾기
2.for 2 , 나누기 0 나뉘면 소수 1을 제외한 1번
3.1과 본인을 제외한 나누기가 되면 소수가 아니지
4.소수만 찾아서 확인하면 소수
*/
2중 for문을 돌렸더니 효율성 체크에서 불합이 되었다.
보완으로 소수를 찾고 소수로만 2중 for문으로 개선을 하였다.
하지만 여전히 효율성측면에서는 불합이 되었다.
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
System.out.println(n);
answer = process(n);
return answer;
}
/*
1.입력값의 소수의 갯수 찾기
2.for 2 , 나누기 0 나뉘면 소수 1을 제외한 1번
3.1과 본인을 제외한 나누기가 되면 소수가 아니지
4.소수만 찾아서 확인하면 소수
*/
public int process(int n){
int result = 0;
List<Integer> primeList = new ArrayList<Integer>();
for (int i =2; i <= n ; i++ ){
if(i == 2) primeList.add(2);
boolean primeChk = true;
for(int j =0; j<primeList.size() ; j++){
if(i%primeList.get(j)==0){
primeChk = false;
break;
}
}
if(primeChk){
primeList.add(i);
}
}
result = primeList.size();
return result;
}
}
해결 솔루션
math.sqrt 제곱근을 사용하면 소수 찾는 모수를 줄일 수 있다.
자연수는 대칭으로 이루어져있기 때문에(에라토스테네스의 체) 접근법을 활용
81의 소수를 찾는다면
81의 약수는 1, 3, 9, 27, 81
Math.sqrt(81) = 9
9를 기준으로 대칭으로 2개씩, 즉 제곱근까지 모수로 접근하면 모수를 줄여 속도를 높일 수 있음
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = 2; i <= n; i++){
int j = 2;
int cnt = 0;
while(j <= (int)Math.sqrt(i)){
if(i % j == 0){
cnt += 1;
break;
}
j += 1;
}
if(cnt == 0) answer += 1;
}
return answer;
}
}
반응형
'IT > 알고리즘_JAVA' 카테고리의 다른 글
알고리즘 조합 (2) | 2022.11.08 |
---|---|
[프로그래머스] 가장큰수 (0) | 2020.06.01 |
[프로그래머스] k번째수 (0) | 2020.06.01 |
[프로그래머스] 탑 (0) | 2020.05.31 |
[프로그래머스] 완주하지 못한 선수 (0) | 2020.05.27 |
Comments