소인수분해

김세호·2023년 1월 5일
0

문제

내 풀이

import java.util.*;
class Solution {
    public int[] solution(int n) {
        int[] answer = {};
        HashSet<Integer> primeFactor = new HashSet<Integer>();// 중복 된 소인수 값은 넣지 않기위해 HashSet사용
        while(n>1){//모두 나눠 떨어지면 n 은 1이되고 while문 종료
            for(int i = 2 ; i <= n ; i++){ // 모든 소인수부터 찾아 작은 수부터 HashSet에 넣기
                if(n%i==0){
                    primeFactor.add(i);
                    n /=i;
                    break; // 소인수를 찾았다면 break
                }
            }
        }
        ArrayList<Integer> primeFactor2 = new ArrayList<Integer>(primeFactor); // HashSet을 ArrayList로 넣기
        Collections.sort(primeFactor2); // 오름차순을 하지 않으면 테스트 한개가 틀림.. 왜일까
        answer = new int[primeFactor2.size()];    
        for(int i = 0 ; i < primeFactor2.size(); i++){
            answer[i]= primeFactor2.get(i);
        }       
        return answer;
    }
}

다른 사람 풀이

import java.util.*;
class Solution {
    public ArrayList solution(int n) {
        ArrayList<Integer> answer = new ArrayList<>();
        for(int i = 2; i <= n; i++){
            while(n%i == 0){// i로 n을 나눴을 때 ,0이 안 될 때까지 반복 , 즉 i로 나눠질 때 까지 다 나누겠다.
                if(!answer.contains(i)) // i가 answer에 들어가 있지 않다면
                    answer.add(i); // 추가
                n /= i;
            }
        }
        return answer;
    }
}

0개의 댓글