<문제>

배열 {1,9,4,0,7,1,3,6,2,3}에서 인접한 원소들끼리 이어붙여 여러 정수들을 만들고,

그중 소수를 찾아 소수들 중 최대값을 구하라.

가령, 1, 19, 194, 1940 등등의 수가 만들어 질 수 있음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Main {
 
    public static void main(String[] args) {
        
        int[] arr = {1,9,4,0,7,1,3,6,2,3};
        // 1개 이상의 연속된 원소들을 이어붙여 1자리 이상의 수를 만들고
        // 그 중 소수를 찾아 그 소수들 중 최대값을 출력
        
        // 원소들을 이어붙여 정수를 만들고
        // 소수인지를 판별하고
        // 그 중 최대값을 찾는다.
        int maxVal = 0// 배열 내 원소들 모두 0모두 크거나 같음
        for (int i = 0; i < arr.length; i++) {
            for (int j = i; j < arr.length; j++) {
            
                //원소들을 이어붙여 정수 만듦
                int val=0;
                for (int k = i; k <= j; k++) {
                    val = val*10 + arr[k];
                }
                
                // 소수인지 판별
                // 그런데, val이 1이면 아래 for문 자체를 거치지 않는다.
                // p는 2부터인데, 조건식의 val이 1이므로 for문 자체를 거치지 않는다.
                boolean isPrime = true;
                for (int p = 2; p*<= val; p++) {
                    if(val % p == 0) {
                        isPrime = false;
                        break;
                    }
                }
                
                //최대값을 찾음
                if(isPrime && val > 1 && maxVal < val) {
                    maxVal = val;
                }
            }
        }
        if(maxVal > 0) {
            System.out.println("가장 큰 소수는 " + maxVal);
        }
        else {
            System.out.println("소수가 존재하지 않습니다.");
        }
        
        
        
        
    }
}
cs

결과는 1940713

+ Recent posts