코테/백준

[백준/JAVA] 9506번: 약수들의 합

imname1am 2023. 3. 28. 11:48
반응형

🔺 문제

 

9506번: 약수들의 합

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

www.acmicpc.net

 

🔺 코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        List<Integer> list = new ArrayList<>();
        
        while(true) {
            list.clear();    // 리스트 초기화
            int num = Integer.parseInt(br.readLine());
            int sum = 0;
		    
            if(num == -1) break;
		    
            for(int i=1 ; i < num ; i++) {
                if(num % i == 0) {
                    list.add(i);
                    sum += i;
                }
            }
		    
            if(sum == num) {
                int len = list.size();
		        
                System.out.print(num + " = ");
                for(int i=0 ; i < len -1 ; i++) {
                    System.out.print(list.get(i) + " + ");
                }
                System.out.print(list.get(len -1));
                System.out.println();
            }
            else {
                System.out.println(num + " is NOT perfect.");
            }   
        }
    }
}

코드 분명 제대로 작성했는데 왜 첫 숫자에 대한 결과가 안 나올까..하고 20분 정도 삽질하다가

알고보니 위에 StringTokenizer 쓸 때 쓰려고 남겨뒀던 코드를 안 지워서 그랬던 것임...🤦‍♀️🤦‍♀️🤦‍♀️

 

그리고 새로 숫자 받을 때마다 리스트랑 sum 값 초기화하기!

 


🔺 다른 풀이들

 

[백준 9506번] 약수들의 합(Java 풀이)

백준알고리즘 9506번 : 약수들의 합 주어진 숫자의 완전수 여부에 따라 적합한 문장을 출력해주면 되는 문제이다. 완전수라 함은 숫자 n이 자신을 제외한 모든 약수들의 합과 같은 것을 의미한다.

agility.tistory.com

 

약수들의 합을 구할 때, 1 ~ Math.sqrt(num) 까지 반복문을 돌리면서 약수를 구하고,

이 값 i가 약수면 리스트에 inum/i 값을 추가하고, sum에도 저 두 값을 추가해주심!

 

그리고 나중에 num 값도 껴들어갔을테니까 빼주고,

리스트 정렬해서 값 뽑아오심 (Collections.sort())

반응형