백준 2231번

CharliePark·2020년 10월 5일
0

TIL

목록 보기
61/67

BOJ 2231 : 분해합

간단하 브루트 포스 문제이다

분해합을 찾는 함수가 주어졌을 때 그 생성자를 찾는 역함수는 존재하지 않는다.

(역함수의 경우 하나의 x가 두개의 y값을 가질 수도 있기 때문)

따라서 숫자 1부터 N-1 까지 분해합을 찾는 함수를 돌리면서

(N의 분해합은 무조건 N보다 크다)

가장 처음 요구되는 분해합이 구해지면 (생성자가 최소) 출력하고

N-1까지 분해합이 구해지지 않으면 0을 출력한다


#include <stdio.h>

int main()
{
    int N;
    
    scanf("%d", &N);
    
    for (int i = 1; i < N; i++)
    {
        int temp = i;
        int num = i;
        
        while(temp > 0)
        {
            num += temp % 10;
            temp /= 10;
        }
        
        if (num == N)
        {
            printf("%d", i);
            N = 0;
            break;
        }
    }
    
    if (N != 0)
        printf("0");
}

0개의 댓글