코딩 테스트

[코딩테스트] 백준 9506번: 약수들의 합

dev.jelee 2025. 7. 28. 23:54

# 문제


# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ9506_v1 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    while (true) {
      int n = Integer.parseInt(br.readLine());
      String output = "";
      int result = 0;

      if (n < 0) {
        return;
      }

      // n % i = 0의 값 저장.
      for (int i = 1; i <= n; i++) {
        if (n % i == 0) {
          output = output + i + " ";
        }
      }
      
      // n을 제외한 나머지 값의 합과 비교하여 계산
      String[] nums = output.split(" ");
      for (int j = 0; j < nums.length; j++) {
        if (Integer.parseInt(nums[j]) == n) {
          continue;
        } else {
          result += Integer.parseInt(nums[j]);
        }
      }

      // 완전수 여부 계산
      if (n == result) {
        System.out.print(n + " = ");
        for (int k = 0; k < nums.length; k++) {
          int val = Integer.parseInt(nums[k]);
          if (val == n) {
            continue;
          }
          System.out.print(nums[k]);

          if (k != nums.length - 2) { 
            System.out.print(" + ");
          }
        }
        System.out.println();
      } else {
        System.out.println(n + " is NOT perfect.");
      }
    }
  }
}

# 입/출력 결과


# 과정

// 풀이 내용: 
// 1. BufferedReader로 입력값 받기.
// 2. while문을 사용하여 무한 반복. 단, -1 입력되면 종료.
// 3. 입력 값은 int n에 저장.
// 4. for문을 사용하여 n % i = 0이면 i를 String output에 저장. (i = 1 초기화)
// 5. String output에 저장된 값을 String[] nums에 배열 형태로 저장.
// 6. n을 제외한 나머지 약수를 int result에 저장.
// 7. n이 완전수인지 체크하여 값 출력.