반응형

● 문제 접근 과정

  1. 변수 N에 주어진 자연수를 입력받습니다.
  2. for 루프를 통해 1부터 N까지의 수를 확인합니다.
  3. 각 수에 대해 각 자릿수의 합을 구하여 sum 변수에 저장합니다. 이를 위해 while 루프를 사용하여 수를 10으로 나누어가면서 각 자릿수를 더합니다.
  4. 해당 수와 각 자릿수의 합을 더한 값이 N과 같은지 확인합니다. 만약 같다면, 해당 수는 N의 생성자가 될 수 있습니다.
  5. 생성자가 되는 가장 작은 수를 찾았으면 result 변수에 저장하고 루프를 종료합니다.
  6. result를 출력합니다.

● 구현

#include <iostream>
using namespace std;

int main() {
  int N;
  int result = 0;
  cin >> N;

  for (int i = 1; i < N; i++) {
    int sum = 0;
    int num = i;
    while (num != 0) { //자릿수마다 더하기
      sum += num % 10;
      cout << sum << endl;
      num /= 10;
      cout << num << endl;
    }
    if (sum + i == N) { //조건
      result = i;
      break;
    }
  }

  cout << result;

  return 0;
}

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

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

반응형

+ Recent posts