백준 2581번 : 소수 [Java]
문제출처
import java.util.Scanner;
public class d018_Q2581 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
int[] prime = find_prime(M, N);
int min = prime[0];
int sum = sum(prime);
if(min == 0) {
System.out.println("-1");
}
else {
System.out.println(sum);
System.out.println(min);
}
sc.close();
}
public static boolean check(int n) {
int i = 2;
while(i < n) {
if(n % i++ == 0) {
return false;
}
}
return true;
}
public static int[] find_prime(int m, int n) {
int[] p = new int[n - m + 1];
int index = 0;
while(m <= n) {
if(check(m)) {
p[index++] = m;
}
m++;
}
return p;
}
public static int sum(int[] a) {
int sum = 0;
for(int i = 0; i < a.length; i++) {
sum += a[i];
}
return sum;
}
}
틀렸다.
내가 대충 생각해본 반례들을 대입해보니 틀렸다,
범위에 1이 포함되는 경우 check에서 1을 거르는 문장이 없어서 true가 반환됐다.
어제 문제 풀때 쓴 함수를 그대로 끌어왔는데
그건 메인에서 1을 거른 후에 저 함수를 사용했어서 문제점을 몰랐는데 저런 문제점이 있더라
import java.util.Scanner;
public class d018_Q2581 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
int[] prime = find_prime(M, N);
int min = prime[0];
int sum = sum(prime);
if(min == 0) {
System.out.println("-1");
}
else {
System.out.println(sum);
System.out.println(min);
}
sc.close();
}
public static boolean check(int n) {
int i = 2;
if(n == 0 || n == 1) {return false;}
while(i < n) {
if(n % i++ == 0) {
return false;
}
}
return true;
}
public static int[] find_prime(int m, int n) {
int[] p = new int[n - m + 1];
int index = 0;
while(m <= n) {
if(check(m)) {
p[index++] = m;
}
m++;
}
return p;
}
public static int sum(int[] a) {
int sum = 0;
for(int i = 0; i < a.length; i++) {
sum += a[i];
}
return sum;
}
}
check에 조건을 추가 해줬다.
n == 0인 경우가 채점시에 있는지는 모르겠지만 0도 저기서 거르지 않으면 find_prime에서 p[0]에 0이 들어가버릴 수도 있어서 그럼 메인에서 -1출력하는 문장에 걸려버리게 된다.
'문제풀이 > 코딩테스트' 카테고리의 다른 글
백준 4948번 : 베르트랑 공준[Java] (0) | 2020.09.20 |
---|---|
백준 1929번 : 소수 구하기[Java] (0) | 2020.09.20 |
백준 1978번 : 소수 찾기[Java] (0) | 2020.09.17 |
백준 2292번 : 벌집 [Java] (0) | 2020.09.16 |
백준 15596번 : 정수 N개의 합 [Java] (0) | 2020.09.16 |