작성
·
214
0
선생님 안녕하세요. 런타임 관련하여 오류가 발생해서 문의드립니다. 코드는 아래와 같이 작성하였는데(수업 듣기 전 먼저 풀어봤습니다.) 런타임에러가 자꾸나서요.. 테스트 케이스 1번은 통과하는데 다른 테스트 케이스를 확인할 수 없어, 어디서 오류가 났는지 확인하기가 어렵습니다.. 테스트 케이스를 알려주시면 스스로 고쳐보겠습니다. 좋은 강의 감사합니다.
import java.util.*;
public class Main {
public ArrayList<Integer> solution(int n, int[] arr) {
ArrayList<Integer> primeNumbers = new ArrayList<>();
int max = findMax(arr);
int[] sieve = createSieve(max, arr);
// 판별시작
for (int i = 0; i < n; i++) {
int reversedNumber = reverseThis(arr[i]);
if (sieve[reversedNumber] == 0) { // 뒤집은 수가 소수라면 배열에 추가
primeNumbers.add(reversedNumber);
}
}
return primeNumbers;
}
private Integer reverseThis(int number) {
int reversedNumber = 0;
// 숫자 -> 문자열 valueOf -> 다시 숫자 parseInt
String strNumber = String.valueOf(number);
for (int i = strNumber.length() - 1; i >= 0; i--) {
char x = strNumber.charAt(i);
reversedNumber = reversedNumber * 10 + Integer.parseInt(String.valueOf(x));
}
return reversedNumber;
}
private int[] createSieve(int max, int[] arr) {
int[] sieve = new int[max + 1];
sieve[0] = sieve[1] = 1; // 0과 1은 소수가 아님
for (int i = 2; i <= max; i++) {
if (sieve[i] == 0) {
for (int j = i * 2; j <= max; j = j + i) { // sieve[i]는 그대로 0으로 남겨둠
sieve[j] = 1;
}
}
}
return sieve;
}
private int findMax(int[] arr) {
int max = Integer.MIN_VALUE;
for (int x : arr) {
if (x > max) {
max = x;
}
}
return max;
}
// max 찾기
// 체 생성
// 뒤집기 함수
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for (int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}
답변 1
0
안녕하세요^^
2번 테스트케이스입니다.
27
469 84 8851 189 69 1210 682 57 6217 484 8 3590 662 36 8275 887 17 1254 462 67 8969 141 70 5603 958 100 3843
답은
953 71 7 859