본문 바로가기

알고리즘/백준

[백준] 9506 - 약수들의 합 (JAVA/ 자바)

반응형

9506번 문제

1. Scanner를 이용한 방법

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main{
public static void main(String[] args){

    Scanner sc = new Scanner(System.in);

    while(true){
        int n = sc.nextInt();
        List<Integer> num = new ArrayList<Integer>();
        int sum = 0;

        if(n == -1){
            break;
        }
        for(int i=1; i<=n; i++){
            if(n % i == 0){
                num.add(i);
            }
        }
        num.remove(num.size()-1);
        for(int i = 0; i<num.size(); i++){
            sum += num.get(i);
        }
        if(sum == n){
            System.out.print(sum + " = ");
            for(int j=0; j<num.size(); j++){
                System.out.print(num.get(j));
                if(j == num.size()-1){
                    System.out.println();
                    break;
                }
                else{
                    System.out.print(" + ");
                }
            }
        }
        else if(n != sum){
            System.out.println(n + " is NOT perfect.");
        }
    }
    sc.close();
    }
}

 

2. BufferedReader를 이용한 방법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main{
public static void main(String[] args)throws IOException{

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    while(true){
        int n = Integer.parseInt(br.readLine());
        List<Integer> num = new ArrayList<Integer>();
        int sum = 0;

        if(n == -1){
            break;
        }
        for(int i=1; i<=n; i++){
            if(n % i == 0){
                num.add(i);
            }
        }
        num.remove(num.size()-1);
        for(int i = 0; i<num.size(); i++){
            sum += num.get(i);
        }
        if(sum == n){
            System.out.print(sum + " = ");
            for(int j=0; j<num.size(); j++){
                System.out.print(num.get(j));
                if(j == num.size()-1){
                    System.out.println();
                    break;
                }
                else{
                    System.out.print(" + ");
                }
            }
        }
        else if(n != sum){
            System.out.println(n + " is NOT perfect.");
        }
    }
    }
}

코드를 좀 더 간단하게 하고 싶었는데 풀다보니 너무 길어져서 아쉽다.

num.remove(num.size()-1); 를 이용해서 약수 리스트의 마지막 index를 없애버리는 식으로 했다.

+ 반복을 제외하는 조건 방법이 헷갈려서 고민하느라 시간이 좀 걸렸다..

반응형