Java/Java 알고리즘

백준 9506번 약수들의 합 JAVA 구현해보기

kimc 2022. 6. 5. 22:05

```

백준 9506번 약수들의 합 JAVA 구현해보기

```

이번 글을 통해 배워갈 내용

  1. 백준 9506번 풀이

https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

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

www.acmicpc.net

 

백준 9506번은

난이도 브론즈 등급의 문제로서

 

숫자 n 이 주어지면

n 이 완전수인지 판별하는 문제입니다.

 

완전수는 자신을 제외한 약수들의 합이 자신과 같은 수입니다.

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


해당되는 수의 약수 리스트를 찾아주는 findDivisors를 만들고

해당 리스트를 활용해 완전수인지 판별 후에

조건에 맞춰서 출력하였습니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Main {

    public static void main(String[] args) throws IOException {
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        List<Integer> inputList = new ArrayList<>();
        while (true) {
            final int input = Integer.parseInt(br.readLine());
            if (input == -1) {
                break;
            }
            inputList.add(input);
        }
        System.out.print(solution(inputList));
    }

    public static String solution(List<Integer> nums) {
        StringBuilder sb = new StringBuilder();

        nums.forEach(num->{
            sb.append(num);

            List<Integer> divisors = findDivisors(num);
            if (num == divisors.stream().mapToInt(i->i).sum()){
                sb.append(" = ");
                divisors.forEach(i->sb.append(i).append(" + "));
                sb.setLength(sb.length()-3);
            } else {
                sb.append(" is NOT perfect.");
            }
            sb.append("\n");
        });

        if (sb.length() > 0){
            sb.setLength(sb.length()-1);
        }
        return sb.toString();
    }

    private static List<Integer> findDivisors(Integer num) {
        return IntStream.range(1,num)
                .filter(i->num%i==0)
                .boxed()
                .collect(Collectors.toList());
    }
}

// https://codemasterkimc.tistory.com

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

728x90