[프로그래머스] 소인수분해

당당·2023년 4월 19일
0

프로그래머스

목록 보기
4/245

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

📔문제

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 2 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.


🚫제한사항

2 ≤ n ≤ 10,000


📝입출력 예

nresult
12[2, 3]
17[17]
420[2, 3, 5, 7]

📝입출력 예 설명

입출력 예 #1

12를 소인수분해하면 2 * 2 * 3 입니다. 따라서 [2, 3]을 return합니다.

입출력 예 #2

17은 소수입니다. 따라서 [17]을 return 해야 합니다.

입출력 예 #3

420을 소인수분해하면 2 * 2 * 3 * 5 * 7 입니다. 따라서 [2, 3, 5, 7]을 return합니다.


🧮알고리즘 분류

  • 수학
  • 정렬
  • 사칙연산
  • 문자열

📃소스 코드

import java.util.Arrays;

class Solution {
    public int[] solution(int n) {
        
        String string="";
        int count=0;
        String a="";
        int[] array=new int[100];
        
        for(int i=2;i<=n;i++){
            if(n%i==0){
                a=String.valueOf(i);
                n=n/i;
                
                if(string.contains(a)){
                    i=1;
                    continue;
                }
                else{
                    string=string+a;
                    array[count]=i;
                    i=1;
                    count++;
                    continue;
                }
            }
        }
        int[] answer = new int[count];
        
        for(int i=0;i<count;i++){
            answer[i]=array[i];
        }
        
        Arrays.sort(answer);
        
        return answer;
    }
}

📰출력 결과


📂고찰

https://school.programmers.co.kr/questions/44899

엉엉엉엉 소인수분해 꿀팁이라며 알려주신 이분께 너무너무 감사하다는 말을 전하고싶다..
처음에 while문으로 작성하였는데 시간 초과가 나타났다..
그래서 for문으로 바꿨는데, 2로 나눠져야하는게 2가 안되고 4가..
그니까 24 인수로 2,3,4가 나와버려서 생각해보니 for문은 i++가 있기 때문에,
i의 값을 재설정 할 때 i=1로 해주었다.

그리고 아까 배운 Arrays.sort()로 오름차순 정렬을 해주었다.

profile
MySQL DBA 신입 지원

0개의 댓글