[programmers] 소수 찾기 (java) -1level
2022. 2. 16. 10:23ㆍAlgorithm/Programmers
문제 설명
문제 해결
class Solution {
public int solution(int n) {
int answer = 0;
int cnt = 0;
for (int i = 2; i <= n; i++){
cnt = 0;
for (int j = 2; j <= i; j++){
if(i % j == 0) cnt += 1;
}
if(cnt == 1) answer += 1;
}
return answer;
}
}
문제를 보고 빠른 시간 안에 풀었다. 이중 for 문을 돌리면 어렵지 않다고 생각했기 때문이다.
하지만 결과는 시간 초과!
문제 해결 2
소수를 찾는 방법인 에라토스테네스의 체를 이용했다. 에라토스테네스의 체란 자기 자신을 제외한 배수의 수를 전부 지우는 방법이다.
코드를 보면 visited 방문 체크 배열을 생성해 배수들은 전부 소수에서 배제시켰다.
public class 소수찾기 {
public int solution(int n) {
int answer = 0;
boolean visited[] = new boolean[n+1];
for (int i = 2; i <= n; i++){
if(visited[i]) continue; // 방문 했으면 지나가고
for (int j = i+i; j <= n; j += i){ // n까지 돌리면서 자기자신을 제외하고 배수들을 true로 만들어준다.
visited[j] = true;
}
}
for (int i = 2; i <= n; i++){
if(visited[i] == false) answer++;
}
return answer;
}
}
728x90
'Algorithm > Programmers' 카테고리의 다른 글
[programmers] 두 정수 사이의 합 (java) -1level (0) | 2022.02.19 |
---|---|
[programmers] 문자열 내 p와 y의 개수 (java) -1level (0) | 2022.02.18 |
[programmers] 문자열 내림차순으로 배치하기 (java) -1level (0) | 2022.02.17 |
[programmers] 시저 암호 (java) -1level (0) | 2022.02.15 |
[programmers] 최소공배수와 최대공약수 (java) -1level (0) | 2022.02.14 |