[백준 9506 자바] 약수들의 합

일단 해볼게·2023년 3월 14일
0

백준

목록 보기
103/132

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

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

public class Main {
    private static void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        List<Integer> inputList = new ArrayList<>();

        while(true) {
            int input = Integer.parseInt(br.readLine()); // int형으로 받기
            int sum = 0;
            inputList.clear(); // 리스트 내부 초기화
            sb.setLength(0); // StringBuffer 초기화

            if(input == -1) { // -1이 들어온 경우
                break;
            }

            for(int i = 1; i < input + 1; i++) {
                if(input % i == 0) { // 약수이고 자기 자신이 아닌 경우 추가
                    inputList.add(i); // 약수를 inputList에 추가
                    sum += i; // 약수들의 합 저장 -> 약수의 합 중 자기 자신까지 더해진 상태
                }
            }

            inputList.sort(Comparator.naturalOrder()); // 오름차순 정렬

            if(sum - input == input) { // 현재 자기 자신까지 더해진 상태라 sum - input이 input과 같아야 한다.
                sb.append(input).append(" = 1"); // 약수에 1이 무조건 들어가므로 추가
                for(int i = 1; i < inputList.size() - 1; i++) { // 1을 제외한 나머지 약수들 StringBuffer에 저장
                    sb.append(" + ").append(inputList.get(i));
                }
            }
            else{ // 아닌 경우
                sb.append(input).append(" is NOT perfect.");
            }

            System.out.println(sb);
        }
    }
    public static void main(String[] args) throws Exception {
        solution();
    }
}

합 구하기, 약수 저장하다가 자기 자신까지 리스트에 저장돼서 출력할 때 애먹었다.

  • 오름차순 정렬 : inputList.sort(Comparator.naturalOrder());
  • StringBuffer 초기화 : sb.setLength(0);
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글