https://www.acmicpc.net/problem/4673
사고과정)
우선 d(n)을 만드는 과정의 함수를 구현해야한다.
이건 n + n의 각 자리를 더하면 되니 간단함.
문제는 해당 조건에 맞는 셀프넘버를 출력시킬 것인가이다.
생각했던 방법은, d(n)을 n이 1부터 쭉 반복한다. 그러면서 d(n)이 10000이하까지일때까지 반복하면서
해당 d(n)의 값과 대응하는 인덱스의 배열에 값이 있다는 뜻의 '1'을 넣어놓는다.
이러면 배열 안에서 d(n)에 해당하는 인덱스가 비어있다면 없는 것이니 없는 인덱스에 한해서만 출력시키면 된다.
#include <iostream>
using namespace std;
int d(int n)
{
int sum = n;
while (n != 0)
{
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
int main()
{
std::cin.tie(NULL);
std::ios::sync_with_stdio(false);
int arr[10001] = { 0, };
for (int i = 1; i <= 10000; i++)
{
if (d(i) <= 10000)
{
arr[d(i)] = 1;
}
}
for (int i = 1; i <= 10000; i++)
{
if (arr[i] != 1)
cout << i << '\n';
}
return 0;
}
'백준 문제풀이 > 실버5' 카테고리의 다른 글
백준 10989번 - 수 정렬하기 3 (using counting sort) (0) | 2021.12.16 |
---|---|
백준 2609번 - 최대공약수와 최소공배수(with 유클리드 호제법) (0) | 2021.12.14 |
백준 1789번 - 수들의 합 (0) | 2021.11.20 |
백준 1316번 - 그룹 단어 체커 (0) | 2021.11.20 |
백준 1475번 - 방 번호 (0) | 2021.11.14 |