알고리즘 공부/정렬(Sort) | 분류

백준 11653 (소인수 분해)

kdhoooon 2021. 1. 3. 20:15

문제


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

 

 

 

 

풀이


소인수는 소수를 찾아서 나눠줘야한다는 생각 때문에 소수가 맞는지를 판단하고 나눠 주는 방식을 하니 시간초과라는 결과가 나왔다.

 

하지만 2부터 증가하면서 나눠주면 이미 소수 위주의 숫자만 걸릴 수 밖에 없다.

그래서 2부터 증가하면서 N 이 1 이 될때까지 나눠주는 방식으로 풀었다.

 

<코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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