본문 바로가기
Computer/Algorithm_Java

[BaekJoon] 9506번 약수들의 합 문제풀이 (Success)

by HJ0216 2023. 7. 22.
 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

 

Language: Java

 

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.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int n;
 
        while((n = Integer.parseInt(br.readLine()))!=-1) {
            List<Integer> intList = new ArrayList<>();
            
            int sum=0;
            for(int i=1; i<n; i++) {
                if(n%i==0) {
                    intList.add(i);
                    sum += i;
                }
                
            }            
            if(sum==n) {
                bw.write(n + " = ");
                for(int j=0; j<intList.size(); j++) {
                    bw.write(intList.get(j)+" ");
                    if(j!=intList.size()-1) {
                        bw.write("+ ");
                    } else {
                        bw.write("\n");
                    }
                }
            } else {
                bw.write(n + " is NOT perfect.\n");
            }
        }
        bw.flush();
        bw.close();
    }
 
}
 
 
 

🤔 해설

1. while 조건문

    - 문법상 외부에서 변수를 선언해주고, 지속적으로 입력값을 받을 수 있게 조정(관련 내용)

2. 초기화

    - 입력값을 새로 받을 때마다, sum과 intList 초기화

3. if 조건문

    - 완전수일 경우, 마지막 약수를 출력할 때는 "+"를 제외하고 줄바꿈 선언

 

😮 이 외의 풀이

1. EOF 처리 시, break문 이용 가능

1
2
3
4
5
        while(true) {
            int n = Integer.parseInt(br.readLine());
            if(n==-1) {break;}
        }
 
 
 

 

2. EOF 처리 시, n 중복 선언하여 무한 루프 탈출 가능

1
2
3
4
5
6
        int n = Integer.parseInt(br.readLine());
        while(n!=-1) {
 
            n = Integer.parseInt(br.readLine());
        }
 
 
 

 

3. StringBuffer 사용

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
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int n;
 
        while((n = Integer.parseInt(br.readLine()))!=-1) {
            StringBuilder sb = new StringBuilder();
            sb.append(n + " = 1");
            
            int sum=1;
            for(int i=2; i<n; i++) {
                if(n%i==0) {
                    sb.append(" + " + i);
                    sum += i;
                }                
            }
            
            if(sum==n) {
                bw.write(sb + "\n");
            } else {
                bw.write(n + " is NOT perfect.\n");
            }
        }
        
        bw.flush();
        bw.close();
        
    }
 
}
 
 
 

- 1은 모든 수의 약수

    - sb에 기본값으로 입력

    - sum도 1로 시작

- sb에 담은 후, 최종적으로 완전수 검사를 통해서 여부를 출력

 

 

 

🔗 소스 코드
HJ0216/TIL/BOJ

 

📚 참고 자료

 

[백준] 9506번 약수들의 합 Java 문제 풀이

문제풀이 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; interface Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBui

aorica.tistory.com