[HackerRank/C++] Modified Kaprekar Numbers

2023. 2. 7. 07:51코딩테스트 해커랭크/Algorithms -Easy

Modified Kaprekar Numbers라는 새로운 개념을 정의한다

 

n을 제곱한 후 n의 자릿수로 양분했을때, 그 두 수를 더한 수가 n이 된다면 그 수는 Modified Kaprekar Numbers가 된다

 

p 이상, q 이하 수에서 Modified Kaprekar Numbers인 수를 전부 출력하며, 존재하지 않는다면 INVALID RANGE를 출력한다

void kaprekarNumbers(int p, int q)
{
    vector<long> result;
    
    for (long i = p; i <= q; ++i)
    {
        string temp1 = to_string(i);
        long ipow = i * i;
        
        long count = pow(10, temp1.size());
        
        if (i == ipow / count + ipow % count)
            result.push_back(i);
    }
    
    if (result.empty())
        cout << "INVALID RANGE";
    else
        for (auto i : result)
            printf("%ld ", i);
}

모든 결과값을 담을 result vector를 선언한다

 

p부터 q까지의 값을 반복하며 해당 값의 제곱수와 자릿수를 구한다

 

양분할 선을 위해 pow 제곱 함수로 10의 temp1.size() 제곱만큼 구하며,

 

ipow / count + ipow % count가 i와 같다면 양분한 수를 합했을때 i와 같으므로 i를 result에 push_back 한다

 

이후 result.empty()라면 INVALID RANGE를 출력하고, 그게 아니라면 result 안의 모든 수를 출력한다