본문 바로가기
하루하루/프로그래머스 문제풀이

[Lv.0 - Java] 120897. 약수 구하기

by 키튼햄 2023. 12. 15.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120897

 

 

 

풀이

풀이1.  cnt 변수로 answer 배열(int[]를 사용한 정적 배열)의 길이를 먼저 구한 후 answer 배열에 n의 약수를 구해 넣기

 

풀이2.  List 배열인 동적 배열의 사용으로 배열 길이를 정하지 않고 바로 배열에 추가하기

단, solution 함수에서의 타입이 List<> 여야 한다.

 

풀이3.  solution 함수에서의 타입을 int[]로 사용할때 동적배열인 List<>를 사용해 풀 수 있는 방법

ArrayList<>배열로 n의 약수를 구해 배열에 넣은 후, 반환할때 answer.stream().mapToInt(x -> x).toArray(); 를 사용하여 ArrayList<>를 int[] 로 변환한다.

 

 

 

 

코드

풀이1.

class Solution {
    public int[] solution(int n) {
        int cnt =0;
        for(int i=1; i<=n; i++){
            if(n%i==0){
                cnt++;
            }
        }
        
        int[] answer = new int[cnt];
        int idx = 0;
        for(int i=1; i<=n; i++){
            if(n%i==0){
                answer[idx++] = i;
            }
        }
        
        return answer;
    }
}

 

풀이2.

import java.util.*;

class Solution {
    public List<Integer> solution(int n) {
        ArrayList<Integer> answer = new ArrayList<>();
        for(int i=1; i<=n; i++){
            if(n%i==0){
                answer.add(i);
            }
        }

        Collections.sort(answer);

        return answer;
    }
}

 

풀이3. (다른사람풀이)

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();
    }
}