Language/JAVA
[JAVA] n개의 연속된 숫자 나열을 정수로 환산하여 소수인지 판별 후 최대값 구하는 프로그램
juyeong
2022. 3. 5. 12:33
반응형
Q/
n개의 음이 아닌 한자리 정수를 입력받아 배열에 저장한다. 이들 중에서 1개 이상의 연속된 정수들을 합하여 얻을 수 있는 소수들 중에서 최대값을 구하여 출력하는 프로그램을 작성하라.
A/
package chapter1;
import java.util.Scanner;
public class code13 {
public static void main(String args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] data = new int[n];
for (int i = 0; i < n; i++)
data[i] = sc.nextInt();
sc.close();
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
// 정수로 환산
int val = 0;
for (int k = i; k <= j; k++)
val = val * 10 + data[k];
// 소수인지 판별
boolean isPrime = true;
for (int k = 2; k * k <= val && isPrime; k++)
if (val % k == 0)
isPrime = false;
// 최대값과 비교
if (isPrime && val > max)
max = val;
}
}
if (max > 0)
System.out.println(max);
else
System.out.println("No prime number");
}
}
이 때 1을 입력받은 경우 1은 소수가 아님에도 isPrime = true; 로 되어있기에 문제가 된다. 따라서 최대값과 비교할 때 조건을 추가해준다.
package chapter1;
import java.util.Scanner;
public class code13 {
public static void main(String args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] data = new int[n];
for (int i = 0; i < n; i++)
data[i] = sc.nextInt();
sc.close();
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
// 정수로 환산
int val = 0;
for (int k = i; k <= j; k++)
val = val * 10 + data[k];
// 소수인지 판별
boolean isPrime = true;
for (int k = 2; k * k <= val && isPrime; k++)
if (val % k == 0)
isPrime = false;
// 최대값과 비교
if (isPrime && val>1 && val > max)
max = val;
}
}
if (max > 0)
System.out.println(max);
else
System.out.println("No prime number");
}
}
반응형