코딩테스트/백준
백준 - 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가 실행되지 않음
리팩토링 후
시간, 메모리 둘다 줄었다.
효율성🆙