알고리즘/문제 풀이

백준 4673 - 셀프 넘버

qqlzzb 2022. 3. 29. 17:22

문제 https://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

 

풀이

브루트포스 알고리즘으로 푸는 문제로, 1부터 10000까지를 돌면서 변수 res에 각 자릿수를 더해준다.

어떤 수에 %10 연산을 해주면, 일의 자리수를 구할 수 있으므로, 해당 수가 0이 될 때까지 모듈러 연산을 반복한다.

그렇게 해서 나온 결과를 배열에 넣어주면 배열에는 셀프 넘버를 제외한 수들은 true, 셀프 넘버는 false 값을 가진다.

따라서 배열을 돌면서 false값을 가진 수들을 출력해준다.

 

코드

#include <iostream>
using namespace std;
bool self[10001];

int main()
{
    for(int i=1; i<=10000; i++)
    {
        int a=i;
        int res=i;
        while(a>0)
        {
            res+=a%10;
            a=a/10;
        }
        self[res]=true;
    }
    for(int i=1; i<=10000; i++)
    {
        if(!self[i]) cout<<i<<'\n';
    }
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 17413 - 단어 뒤집기  (0) 2022.06.03
백준 1213 - 팰린드롬 만들기(C++)  (0) 2022.06.02
백준 1475 - 방 번호  (0) 2022.03.23
백준 13015 - 별 찍기 - 23(C++)  (0) 2022.03.22
백준 1929 - 소수 구하기(C++)  (0) 2022.03.21