문제 풀이
작성 코드
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
51
| import java.util.*;
class Solution {
public int[] solution(long begin, long end) {
// end+1 크기의 배열에서 인덱스 별로 1과 자신을 제외한 가장 큰 약수를 삽입하면 된다.
int[] answer = new int[(int)(end-begin+1)];
int start = (int)begin;
for(int i=0; i<answer.length; i++) {
answer[i] = getMaxDivisor(start);
start++;
}
return answer;
}
public static int getMaxDivisor(int number) {
// 1일 경우 0 반환
if(number == 1) {
return 0;
}
// 소수가 아닐 경우 1과 지신을 제외한 최대 약수 값 반환
List<Integer> list = new ArrayList<>();
for(int i=2; i<=Math.sqrt(number); i++) {
if(number % i == 0) {
list.add(i);
// 숫자블록은 10,000,000까지 놓을 수 있다. 그래서 number의 약수중 10^7 이하인 가장 큰 수를 넣어야 한다.
if((number/i) <= 10000000) {
list.add(number/i);
break;
}
}
}
if(list.size()>0) {
return list.get(list.size()-1);
}
// 소수일 경우 1을 반환
return 1;
}
public static void main(String[] args) {
Solution sol = new Solution();
// long begin = 1;
// long end = 10;
// long begin = 2;
// long end = 5;
long begin = 100000014;
long end = 100000016;
sol.solution(begin, end);
}
}
|
회고
출처
- 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.