[BOJ/4673/C++] 셀프 넘버

SHark·2023년 3월 5일
0

BOJ

목록 보기
14/59

출처:https://www.acmicpc.net/problem/4673

문제

  • 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자.예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.
  • n을 d(n)의 생성자라고 한다. 생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
    10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

조건

  • 10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

풀이

10000보다 작은 수를 반복하면서, 각 자릿수를 더한 숫자값을 체크하는 방식으로 구현을 해보았다. 각 자릿수를 더하는 알고리즘이 생각보다 자주 나오므로, 알고있으면 좋을거 같다! for문 보다 while문을 이용하는게 더 좋은거 같음!

#include <bits/stdc++.h>
using namespace std;

int check_self_Number(int N)
{
  int sum = N;
  while (N > 0)
  {
    sum += N % 10;
    N /= 10;
  }
  return sum;
}
int main()
{

  bool self_Number[20001] = {};
  int target;
  for (int i = 1; i < 10001; i++)
    self_Number[check_self_Number(i)] = true;
  for (int i = 1; i < 10001; i++)
  {
    if (!self_Number[i])
      cout << i << '\n';
  }
  return 0;
}

0개의 댓글