Blog

약수 구하기

문제 #

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

  • 제한사항

    • 1 ≤ n ≤ 10,000

  • 입출력 예

    n result
    24 [1, 2, 3, 4, 6, 8, 12, 24]
    29 [1, 29]

나의 풀이 #

import java.util.*;

class Solution {
    public int[] solution(int n) {
        ArrayList<Integer> list = new ArrayList<>();
        
        for(int i = 1; i<=n; i++){
            if(n%i == 0){
                list.add(i);
            }
        }
        
        int[] answer = new int[list.size()];
        for(int j = 0; j<list.size(); j++){
            answer[j] = list.get(j);
        }
        
        return answer;
    }
}
  • 루프 내에서 각 정수는 n을 정수로 나눈 나머지가 0인지 확인하여 n의 약수인지 확인합니다. 정수가 약수이면 list ArrayList에 추가됩니다.
    • i를 0부터 시작할 경우 n을0으로 나누게 되어 오류가 발생한다.
  • list와 동일한 크기인 answer배열에 list값을 넣는다.

다른 사람의 풀이 #

import java.util.List;
import java.util.ArrayList;

class Solution {
    public int[] solution(int n) {
        List<Integer> answer = new ArrayList<>();
        for(int i=1; i<=n; i++){
            if(n % i == 0){
                answer.add(i);
            }
        }
        return answer.stream().mapToInt(x -> x).toArray();
    }
}
  • 새로운 list를 구현하는 대신 answer을 list형태로 선언하였다.
  • 또한 ArrayList대신 List를 이용하여 더 유연하게 이용가능하다.
  • 스트림을 이용하여 배열을 Int형으로 변환하였으며 그 값을 바로 return하였다.

관련개념 학습 #

  • 관련 개념을 찾아서 공부한 내용을 적는다.
  • ctrl + p로 내가 필기한 내용 중에서 관련내용이 있는지 찾아서 그 페이지의 링크를 복사하여 붙혀넣는다.
  • 필기 페이지에도 이 문제의 링크를 복사하여 “관련 문제"라고 써놓고 붙혀넣는다.