GW LABS

[백준 2231] 분해합 본문

Algorithm & DataStructure

[백준 2231] 분해합

GeonWoo Kim 2020. 5. 4. 11:18

처음 접근할 때에는 모든 분해합을 구하면서 가장 작은 생성자를 구하려고 했다. 이럴 경우 숫자가 커지면 커질수록 생성자를 계산하는 과정이 늘어나게 된다. 해법은 입력으로 들어온 숫자에서 자리수 * 9를 빼주면 범위를 상당히 좁힐 수 있다. 아래는 해당 구현법을 적용한 C++ 소스이다.

 

#include <iostream>

using namespace std;

int cntPos(int number) {
    int cnt = 0;
    while (number) {
        number /= 10;
        cnt++;
    }
    return cnt;
}

int sumPosNumbers(int number) {
    int sum = 0;
    while (number) {
        sum += number % 10;
        number /= 10;
    }
    return sum;
}

int main() {

    int number;
    cin >> number;
    
    int originPart = number - (cntPos(number) * 9);
    for (int index = originPart; index <= number; index++) {
        int testNum = index + sumPosNumbers(index);
        if (testNum == number) {
            cout << index << endl;
            return 0;
        }
    }

    cout << 0 << endl;

    return 0;
}

 

 

Comments