[백준] 9506

ninano05·2026년 3월 27일

list 반복문에서 초기화
반복문 안에서 list를 초기화하고 싶다면, 객체를 다시 선언하지 말고
list.clear()로 초기화 한다. 그래야 메모리를 아낄 수 있다.

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

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        ArrayList<Integer> list = new ArrayList<>();
        while(true) {
            int n = Integer.parseInt(br.readLine());
            if(n == -1) break; // 입력 검증

            list.clear();
            int sum = 1; // 초기값
            list.add(1);

            for(int i=2; i*i<=n; i++) {
                // 앞의 절반의 약수들
                // 뒤의 절반의 약수들
                // 거듭제곱근은 빼고
                if(n%i==0) {
                    sum+=i;
                    list.add(i);
                    if(i*i != n) {
                        sum+=n/i;
                        list.add(n/i);
                    }
                }
            }
            Collections.sort(list);

            if(sum == n) {
                bw.write(n+" = ");
                for(int num : list) {
                    if(num == list.get(list.size()-1)) bw.write(num+ "\n");
                    else bw.write(num+" + ");
                }
            } else {
                bw.write(n+" is NOT perfect.\n");
            }
        }
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
초보 개발자

0개의 댓글