클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 정수 n을 매개변수로 하는 solution 메소드를 선언합니다.
solution은 정수배열을 반환하므로 데이터타입을 int[]로 합니다.
● public int[] solution(int n) {
3. 제한사항을 확인하고, 만족하지 않는다면 예외처리합니다.
● if(n < 1 || n > 10000){ throw new IllegalArgumentException("n은 1이상 10000이하입니다."); }
4. 정수타입의 List객체 divisors를 생성합니다.
for문을 이용하여 i가 1씩 늘려가며, n을 나눴을 때 나머지가 0이 되는 값이 약수이므로, divisors List에 추가합니다.
(여기서 List<Integer>인 이유는. Java가 <>안에 들어가는 제네릭 파라미터에는 참조 타입에 대해서만 작동하며, int와 같은 원시(primitive) 타입은 제네릭 타입의 인자로 사용할 수 없습니다.)
● List<Integer> divisors = new ArrayList<>();
for (int i = 1; i <= n; i++) { if (n % i == 0) { divisors.add(i); } }
5. Integer 타입으로 만들어진 divisors List를 정수배열로 반환하기 위해 변환하는 과정을 거칩니다.
● int[] result = new int[divisors.size()]; for (int i = 0; i < divisors.size(); i++) { result[i] = divisors.get(i); }
return result; } }
4) 코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int n) {
if(n < 1 || n > 10000){
throw new IllegalArgumentException("n은 1이상 10000이하입니다.");
}
List<Integer> divisors = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
divisors.add(i);
}
}
int[] result = new int[divisors.size()];
for (int i = 0; i < divisors.size(); i++) {
result[i] = divisors.get(i);
}
return result;
}
}
5) 느낀점
List 생성시 타입을 int로 만드는 실수, List의 크기는 size를 이용해야하는데 length를 사용하려했던 실수가 있었습니다.