반응형

● 문제 접근 과정

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

2. 입력의 마지막엔 -1이 주어진다.

3. n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고). 이때, 약수들은 오름차순으로 나열해야 한다. n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

4. while문 안에 만약 입력값이 -1일 경우 while문을 통과함.

5. n을 받고 n의 자기자신을 제외하고 약수들을 배열에 저장. 약수들의 합도 저장

6. 약수들의 합이 만약 n과 같다면, 약수들의 합을 나열하여 출력.

7. 그게 아니라면 cout << n << " is NOT perfect." << endl;

8. 한번 돌고 나면 변수들을 다시 초기화 하여 n의 입력값이 -1이 나올때 까지 반복.

● 구현

#include <iostream>
using namespace std;

int main() {
  int n;
  int sum = 0;
  int cnt = 0;
  int a[10000];
  int j = 0;
  
  while (1) {
    cin >> n;
    if (n == -1)
      break;
    for (int i = 1; i <= n / 2; i++) {
      if (n % i == 0) {
        a[j] = i;
        j++;
        cnt++;
        sum += i;
      }
    }
    
    if (sum == n) {
      cout << n << " = " << a[0];
      for (int i = 1; i < cnt; i++) {
        cout << " + " << a[i];
      }
      cout << endl;
      ;
    } else
      cout << n << " is NOT perfect." << endl;

    j = 0;
    cnt = 0;
    sum = 0;
  }

  return 0;
}

 

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

 

9506번: 약수들의 합

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

www.acmicpc.net

 

반응형

+ Recent posts