코딩테스트/백준

백준 - 11653. 소인수 분해

hwangsehee 2025. 1. 27. 16:15

문제 설명

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

 

import java.io.*;
import java.util.*;

public class Main {
    
    public static List<Integer> list = new ArrayList<>();
    
    public static void main(String [] args )throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
       int a = Integer.parseInt(br.readLine());
        List <Integer> list = new ArrayList<>();
        int i = 2;
        while(a >1){
            if(a%i == 0 && isPrime(i)){
                while(a%i == 0){
                    list.add(i);
                    a/=i;
                }
            }
            i++;
        }
        if(list.size() > 0){
            for (Integer integer : list) {
                System.out.println(integer);
            }
        }
    }
     private static boolean isPrime(int num){
        for(int i = 2 ; i<num; i++){
            if(num %i ==0)return false;
        }
        return true;
    }
}

리팩토링 

 

import java.io.*;
import java.util.*;

public class Main {
    
    public static void main(String [] args )throws IOException{
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       StringBuilder sb = new StringBuilder();
       
       int a = Integer.parseInt(br.readLine());
        
       for(int i = 2; i*i<=a;i++){
       		while(a%i == 0){
            	sb.append(i).append("\n");
                a/=i;
            }
       }
       if(a!= 1)sb.append(a);
       
       System.out.print(sb);
    }
}

1. 소수 판별 로직 삭제 + list 객체 삭제 

2. a가 1 일때는 sb.append가 실행되지 않음 

리팩토링 후 

시간, 메모리 둘다 줄었다. 

효율성🆙