백준/백준 단계별 문제풀이

백준 4673번 (C++)

FDEE 2020. 8. 21. 22:41

www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌�

www.acmicpc.net

 

<답안>

#include <iostream>

using namespace std;

 

int d(int n)

{

    int result = n;

    while(n != 0)

    {

        result += n%10;

        n = n/10;

    }

    return result;

}

int main() {

    bool boolArray[10001] = {false};

    int inx;

    

    for(int i=1; i<=10000; i++)

    {

        inx = d(i);

        if(inx <= 10000)

            boolArray[inx] = true;

    }

    

    for(int i=1; i<=10000; i++)

    {

        if(!boolArray[i])

            cout<<i<<"\n";

    }

    

    return 0;

}

 

<설명>

d(n)함수를 먼저 만들었다

반환값인 result에 n을 더한 뒤 n이 0이될때까지 n%10한 값을 result에 더하고 n/10을 반복한다

그렇게 얻어진 result 값을 반환한다

 

크기가 10001인 bool형 배열 boolArray[10001]을 선언한다

인덱스 i=1부터 i=10000까지 증가시키면서
d(i)함수 값을 inx에 저장한다

inx값이 10000보다 작은 경우 boolArray[inx] 값을 true, 즉
[inx]위치에 inx값이 d(n) 숫자임을 나타낸다

결과적으로 인덱스 i=1부터 i=10000까지 증가시키면서

boolArray[i]값이 false인 경우 i를 출력 후 개행한다

 

'백준 > 백준 단계별 문제풀이' 카테고리의 다른 글

백준 11654번 (C++)  (0) 2020.08.21
백준 1065번 (C++)  (0) 2020.08.21
백준 15596번 (C++)  (0) 2020.08.21
백준 4344번 (C++)  (0) 2020.08.21
백준 8958번 (C++)  (0) 2020.08.21