[11653 소인수분해]
난이도: 실버5
11653번: 소인수분해
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
www.acmicpc.net
문제
입력
출력
[아이디어]
처음에는 나누는 수가 소수인지 판단해주는 방식을 사용하였다. 그런데 계속 시간 초과가 떴다.
왜 그럴까 생각해보니 이미 소수이면 해당 수로 다 나누기 때문에 그의 배수로는 나눌 수 없다.
예를 들면 12 = 2 x 2 x 3 이다. 이 때, 12 % 2 == 0 이므로 12 / 2 = 6 / 2 = 3 을 만들어버린다.
따라서 이후에 4, 6, 8 등으로는 나눌 수 없게 된다.
물론 그 전에 수가 1이 된다면 반복문을 빠져나온다.
[JAVA 코드]
import java.io.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringBuilder output = new StringBuilder();
static int N;
public static void main(String[] args) throws NumberFormatException, IOException {
N = Integer.parseInt(br.readLine());
if(N == 1) return;
for(int i = 2; i <= N; i++) {
if(N % i == 0) {
while(N % i == 0) {
output.append(i + "\n");
N /= i;
}
}
if(N == 1) break;
}
System.out.println(output);
}
}
'알고리즘 > BAEKJOON' 카테고리의 다른 글
[백준] 2141 우체국 (Java) (0) | 2022.06.03 |
---|---|
[백준] 13265 색칠하기 (Java) (0) | 2022.05.29 |
[백준] 2580 스도쿠 (Java) (0) | 2022.05.21 |
[백준] 11509 풍선 맞추기 (Java) (0) | 2022.05.20 |
[백준] 15681 트리와 쿼리 (Java) (0) | 2022.05.20 |
댓글