문제: https://school.programmers.co.kr/learn/courses/30/lessons/12921
1. 코드
import java.util.*;
class Solution {
public int solution(int n) {
int answer = 0;
boolean[] arr = new boolean[n + 1];
Arrays.fill(arr, true);
arr[0] = false;
arr[1] = false;
for(int i = 2; i * i <= n; i++) {
if(arr[i]) {
for(int j = i * i; j <= n; j += i) {
arr[j] = false;
}
}
}
for(boolean check : arr)
if(check) answer++;
return answer;
}
}
2. 설명
에라토스테네스의 체를 이용하여 문제를 해결하였습니다.
int answer = 0;
boolean[] arr = new boolean[n + 1];
Arrays.fill(arr, true);
arr[0] = false;
arr[1] = false;
먼저 boolean 배열을 n + 1만큼 만들고 0, 1의 인덱스를 제외하고 true로 변환합니다.
for(int i = 2; i * i <= n; i++) {
if(arr[i]) {
for(int j = i * i; j <= n; j += i) {
arr[j] = false;
}
}
}
반복문을 통해서 소수의 배수는 전부 false로 변환합니다.
for(boolean check : arr)
if(check) answer++;
arr에서 true의 개수를 answer에 저장합니다.
3. 정리
- 에라토스테네스의 체에 대해 알면 쉽게 해결할 수 있다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 161989번: 덧칠하기 [Java] (0) | 2023.07.31 |
---|---|
프로그래머스 - 42889번: 실패율 [Java] (0) | 2023.07.30 |
프로그래머스 - 12977번: 소수 만들기 [Java] (0) | 2023.07.28 |
프로그래머스 - 42840번: 모의고사 [Java] (0) | 2023.07.27 |
프로그래머스 - 159994번: 카드 뭉치 [Java] (0) | 2023.07.26 |