백준 4673_셀프 넘버[C++]
본문 바로가기
Algorithm/Python, C++

백준 4673_셀프 넘버[C++]

by liveloper jay 2022. 1. 20.

문제

 

풀이

 위의 문제에서 생성자를 구하는 방법은 다음과 같습니다. 만약 두 자리 수인 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

댓글