Post

๐Ÿงฉ Baekjoon 9506 - ์•ฝ์ˆ˜๋“ค์˜ ํ•ฉ

๐Ÿงฉ Baekjoon 9506 - ์•ฝ์ˆ˜๋“ค์˜ ํ•ฉ

### ๋ฌธ์ œ

์–ด๋–ค ์ˆซ์ž n์ด ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์•ฝ์ˆ˜๋“ค์˜ ํ•ฉ๊ณผ ๊ฐ™์œผ๋ฉด,ย ๊ทธ ์ˆ˜๋ฅผ ์™„์ „์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 6์€ 6 = 1 + 2 + 3 ์œผ๋กœ ์™„์ „์ˆ˜์ด๋‹ค. n์ด ์™„์ „์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

์ž…๋ ฅ

์ž…๋ ฅ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ํ•œ ์ค„ ๊ฐ„๊ฒฉ์œผ๋กœ n์ด ์ฃผ์–ด์ง„๋‹ค. (2 < n < 100,000) ์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰์—” -1์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋งˆ๋‹ค ํ•œ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. n์ด ์™„์ „์ˆ˜๋ผ๋ฉด, n์„ n์ด ์•„๋‹Œ ์•ฝ์ˆ˜๋“ค์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด ์ถœ๋ ฅํ•œ๋‹ค(์˜ˆ์ œ ์ถœ๋ ฅ ์ฐธ๊ณ ). ์ด๋•Œ, ์•ฝ์ˆ˜๋“ค์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ดํ•ด์•ผ ํ•œ๋‹ค. n์ด ์™„์ „์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด n is NOT perfect. ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ

โœ… ์ž…๋ ฅ 1

1
2
3
4
6
12
28
-1

โœ… ์ถœ๋ ฅ 1

1
2
3
6 = 1 + 2 + 3
12 is NOT perfect.
28 = 1 + 2 + 4 + 7 + 14

์ž‘์„ฑ ์ฝ”๋“œ

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
50
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.ArrayList;  
import java.util.Collections;  
import java.util.List;  
  
public class Main {  
    public static void main(String[] args) throws IOException {  
        // 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
          
        // 2. ์ž…๋ ฅ ๊ฐ’์ด "-1"์ผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต  
        while (true) {  
            // ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”  
            StringBuilder sb = new StringBuilder();  
            List<Integer> divisors = new ArrayList<>();  
            int n = Integer.parseInt(br.readLine());  
            
            // ์ค‘๋‹จ  
            if (n == -1) break;  
            
            // ์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ  
            int sum = 0;  
            for (int i = 1; i <= Math.sqrt(n); i++) {  
                if (n % i == 0) {  
                    divisors.add(i);  
                    sum += i;  
                    if (i != n / i && n / i != n) {  
                        divisors.add(n / i);  
                        sum += n / i;  
                    }  
                }  
            }  
            
            // ์ •๋ ฌ  
            if (sum == n) {  
                Collections.sort(divisors);  
                sb.append(n).append(" = ");  
                for (int divisor : divisors) sb.append(divisor).append(" + ");  
                sb.setLength(sb.length() - 2);  
            } else {  
                sb.append(n).append(" is NOT perfect.");  
            }  
            
            // ์ถœ๋ ฅ  
            System.out.println(sb);  
        }  
    }  
}
This post is licensed under CC BY 4.0 by the author.