Post

🧩 Baekjoon 11653 - μ†ŒμΈμˆ˜λΆ„ν•΄

🧩 Baekjoon 11653 - μ†ŒμΈμˆ˜λΆ„ν•΄

문제

μ •μˆ˜ N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μ†ŒμΈμˆ˜λΆ„ν•΄ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μ •μˆ˜ N (1 ≀ N ≀ 10,000,000)이 μ£Όμ–΄μ§„λ‹€.

좜λ ₯

N의 μ†ŒμΈμˆ˜λΆ„ν•΄ κ²°κ³Όλ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 좜λ ₯ν•œλ‹€. N이 1인 경우 아무것도 좜λ ₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

예제

βœ… μž…λ ₯ 1

1
72

βœ… 좜λ ₯ 1

1
2
3
4
5
2
2
2
3
3

βœ… μž…λ ₯ 2

1
3

βœ… 좜λ ₯ 2

1
3

βœ… μž…λ ₯ 3

1
9991

βœ… 좜λ ₯ 3

1
2
97
103

μž‘μ„± μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Arrays;  
  
public class Main {  
    static int[] primeArr;  
    
    public static void main(String[] args) throws IOException {  
        // 1. λ³€μˆ˜ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        int n = Integer.parseInt(br.readLine());  
        
        // 2. 처리 및 좜λ ₯  
        makePrimeArr(n);  
        factorize(n);  
    }  
    
    static void makePrimeArr(int num) {  
        // λ°°μ—΄ μ΄ˆκΈ°ν™”  
        primeArr = new int[num + 1];  
        Arrays.fill(primeArr, 1);  
        primeArr[0] = primeArr[1] = 0;  
        
        // μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체  
        for (int i = 2; i <= num; i++) {  
            if (primeArr[i] == 0) continue;  
            for (int j = i * 2; j <= num; j += i) primeArr[j] = 0;  
        }  
    }  
    
    static void factorize(int n) {  
        // 순회 처리  
        for (int i = 2; i <= n; i++) {  
            // μ†Œμˆ˜μΌ 경우 κ°€λŠ₯ν•  λ•ŒκΉŒμ§€ λ‚˜λˆ—μ…ˆ 처리  
            if (primeArr[i] == 1) {  
                while (n % i == 0) {  
                    System.out.println(i);  
                    n /= i;  
                }  
            }  
            
            // μ’…λ£Œ 처리  
            if (n == 1) break;  
        }  
    }  
}

회고

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    static int[] primeArr;
    
    public static void main(String[] args) throws IOException {
        // 1. λ³€μˆ˜ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        
        // 2. 처리 및 좜λ ₯
        makePrimeArr(n);
        factorize(n);
    }
    
    static void makePrimeArr(int num) {
        // λ°°μ—΄ μ΄ˆκΈ°ν™”
        primeArr = new int[num + 1];
        Arrays.fill(primeArr, 1);
        primeArr[0] = primeArr[1] = 0;
        
        // μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체
        for (int i = 2; i <= num; i++) {
            if (primeArr[i] == 0) continue;
            for (int j = i * 2; j <= num; j += i) primeArr[j] = 0;
        }
    }
    
    static void factorize(int n) {
        // 순회 처리
        for (int i = 2; i * i <= n; i++) {
            // μ†Œμˆ˜μΌ 경우 κ°€λŠ₯ν•  λ•ŒκΉŒμ§€ λ‚˜λˆ—μ…ˆ 처리
            if (primeArr[i] == 1) {
                while (n % i == 0) {
                    System.out.println(i);
                    n /= i;
                }
            }
        }
        
        // n이 1보닀 크면 μ†Œμˆ˜μ΄λ―€λ‘œ 좜λ ₯
        if (n > 1) {
            System.out.println(n);
        }
    }
}
  • μœ„ μ½”λ“œμ²˜λŸΌ μ œκ³±κ·ΌκΉŒμ§€λ§Œ μ²˜λ¦¬ν•΄λ³΄κΈ°λ„ ν–ˆλŠ”λ° i * i μ—°μ‚° λ•Œλ¬ΈμΈμ§€ 였히렀 속도가 λŠλ €μ‘Œλ‹€.
  • κ·ΈλŸΌμ—λ„ μž…λ ₯ 값이 큰 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ λ§Žμ•„μ§„λ‹€λ©΄ μ œκ³±κ·ΌκΉŒμ§€λ§Œ μ²˜λ¦¬ν•˜λŠ” 방식이 더 μœ λ¦¬ν•  κ²ƒμœΌλ‘œ 보인닀.
This post is licensed under CC BY 4.0 by the author.