문제
풀이
위의 문제에서 생성자를 구하는 방법은 다음과 같습니다. 만약 두 자리 수인 23이 있다면 계산식은 (현재 수+ 10의자리수+1의자리수)가 됩니다. 따라서 23으로 계산을 진행하면 23+2+3=28이 됩니다. 따라서 23은 28의 생성자가 됩니다.
여기서 이 공식으로 계산하였을 때 결과로 나오지 않는, 즉 생성자가 없는 수를 셀프넘버라고 합니다.
이 문제에서 주어진 조건은 10000아래의 수 중에서 셀프넘버인 숫자를 구하는 것이므로 크기가 10000인 배열을 생성해주고, 위의 공식대로 풀이를 진행하여 결과로 나오는 값에 해당하는 배열의 값을 1로 바꿔줍니다(위 과정을 통해 생성자가 있는 수라는 것을 나타냅니다). 이 과정을 10000보다 작을 때 까지 반복해주고, 값이 0인 배열을 출력해주면 됩니다. 아래 코드를 보면서 설명을 읽으시면 조금 더 쉽게 이해할 수 있을 것입니다.
소스코드
#include <iostream>
using namespace std;
int selfNum(int n){
int sum =n;
while(n!=0){
sum += n%10;
n /=10;
}
return sum;
}
int main(){
int arr[10001]={0,};
for (int i = 1; i <= 10000; i++)
{
if(selfNum(i)<=10000) arr[selfNum(i)]=1;
}
for (int i = 1; i <= 10000; i++)
{
if (arr[i]!=1) cout << i << '\n';
}
}
'Algorithm > Python, C++' 카테고리의 다른 글
백준 1712_손익분기점[C++] (0) | 2022.01.22 |
---|---|
백준 15596_정수 N개의 합[C++] (0) | 2022.01.21 |
백준 1065_한수[C++] (0) | 2022.01.19 |
백준 10818_최소, 최대[C++] (0) | 2022.01.19 |
백준 8958_OX퀴즈[C++] (0) | 2022.01.18 |
댓글