알고리즘 및 코테/기타 문제
배열 내 소수 생성하여 최대값 구하기
성장코딩
2023. 1. 26. 22:48
<문제>
배열 {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*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