문제 설명
정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ n ≤ 10,000
나의 코드
import java.util.*;
class Solution {
public int[] solution(int n) {
int sqrt = (int) Math.sqrt(n);
ArrayList<Integer> list = new ArrayList<>();
for(int i=1; i<=sqrt; i++) {
if(n%i == 0) {
list.add(i);
if(n/i != i) {
list.add(n/i);
}
}
}
int[] answer = new int[list.size()];
for(int i=0; i<list.size(); i++) {
answer[i] = list.get(i);
}
Arrays.sort(answer);
return answer;
}
}
느낀 점
약수 구하는 알고리즘에 대해 구글링을 통해 학습하며 풀어냈다.
먼저 런타임 에러를 대비하여 최적화된 알고리즘을 구하기 위해 sqrt()
함수를 사용하여 반복문 범위 제한을 제곱근으로 뒀다. 반복문을 돌며 조건문을 사용하여 약수 중 가장 작은 수부터 큰 수들을 저장시키고, 마지막에 List를 배열로 바꿔주면서 sort()
함수를 통해 오름차순으로 정렬해주며 해결!