
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n | result |
10 | 4 |
5 | 3 |
- 입출력 예 #1 : 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
- 입출력 예 #2 : 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
시간 초과 코드
/*
boolean isPrime = true;
이렇게 처음에 초기화를 하면안된다. 한 번 isPrime이 false가 되면,
그 다음 i에 대해 다시 true로 되돌려주지 않기 때문에
계속 false로 남아서 소수 판정이 전부 실패함
*/
class Solution {
public int solution(int n) {
int answer = 0;
boolean isPrime;
for (int i = 2; i <= n; i++) {
isPrime = true; // isPrime = true;는 각 i에 대해 처음엔 소수라고 가정하고 시작하는 것.
for (int j = 2; j < i; j++) { // 어떤 수 i가 소수인지 판단하려면, 2부터 i - 1까지 나누어 떨어지는 수가 하나라도 있는지 확인하면 돼.
if (i % j == 0) {
isPrime = false; //
break;
}
}
if (isPrime) {
answer++;
}
}
return answer;
}
}

통과 코드
class Solution{
public int solution(int n){
int answer = 0;
for (int i = 2; i <= n; i++){
if (isPrime(i)) {
answer += 1;
}
}
return answer;
}
private boolean isPrime(int n){
for (int i = 2; i * i <= n; i++){ // 왜 i*i인지
// 나눠 떨어질 경우
if (n % i == 0){
return false; // 나누어 떨어지는 경우가 왜 false인지
}
}
return true;
}
}
'👨💻 Coding Test > 구현' 카테고리의 다른 글
[Programmers/Java/Lv.1/문자열 유형] 16.문자열을 정수로 바꾸기 (0) | 2025.04.07 |
---|---|
[Programmers/Java/Lv.1/문자열 유형] 15.수박수박수박수박수박수? (0) | 2025.04.07 |
[Programmers/Java/Lv.1/문자열 유형] 13.서울에서 김서방 찾기 (0) | 2025.04.06 |
[Programmers/Java/Lv.1/문자열 유형] 12.문자열 다루기 기본 (0) | 2025.04.06 |
[Programmers/Java/Lv.1/문자열 유형] 11.문자열 내림차순으로 배치하기 (0) | 2025.04.05 |

문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n | result |
10 | 4 |
5 | 3 |
- 입출력 예 #1 : 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
- 입출력 예 #2 : 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
시간 초과 코드
/*
boolean isPrime = true;
이렇게 처음에 초기화를 하면안된다. 한 번 isPrime이 false가 되면,
그 다음 i에 대해 다시 true로 되돌려주지 않기 때문에
계속 false로 남아서 소수 판정이 전부 실패함
*/
class Solution {
public int solution(int n) {
int answer = 0;
boolean isPrime;
for (int i = 2; i <= n; i++) {
isPrime = true; // isPrime = true;는 각 i에 대해 처음엔 소수라고 가정하고 시작하는 것.
for (int j = 2; j < i; j++) { // 어떤 수 i가 소수인지 판단하려면, 2부터 i - 1까지 나누어 떨어지는 수가 하나라도 있는지 확인하면 돼.
if (i % j == 0) {
isPrime = false; //
break;
}
}
if (isPrime) {
answer++;
}
}
return answer;
}
}

통과 코드
class Solution{
public int solution(int n){
int answer = 0;
for (int i = 2; i <= n; i++){
if (isPrime(i)) {
answer += 1;
}
}
return answer;
}
private boolean isPrime(int n){
for (int i = 2; i * i <= n; i++){ // 왜 i*i인지
// 나눠 떨어질 경우
if (n % i == 0){
return false; // 나누어 떨어지는 경우가 왜 false인지
}
}
return true;
}
}
'👨💻 Coding Test > 구현' 카테고리의 다른 글
[Programmers/Java/Lv.1/문자열 유형] 16.문자열을 정수로 바꾸기 (0) | 2025.04.07 |
---|---|
[Programmers/Java/Lv.1/문자열 유형] 15.수박수박수박수박수박수? (0) | 2025.04.07 |
[Programmers/Java/Lv.1/문자열 유형] 13.서울에서 김서방 찾기 (0) | 2025.04.06 |
[Programmers/Java/Lv.1/문자열 유형] 12.문자열 다루기 기본 (0) | 2025.04.06 |
[Programmers/Java/Lv.1/문자열 유형] 11.문자열 내림차순으로 배치하기 (0) | 2025.04.05 |