Development./Problem solving.

[BAEKJOON] 1065 - 한수

Chuuu_DevCamp:) 2020. 8. 17. 18:59
반응형

https://www.acmicpc.net/problem/1065

양의 정수 X의 각 자리수가 등차수열을 이룰 때 그 수를 한수라고 한다.
1 <= N <= 1000인 숫자 N이 입력될 경우, N보다 작거나 같은 한수의 개수를 구하는 문제이다.
우선, 1~99는 어떤 수가 입력 되더라도 한수가 되기 때문에, 1~99가 입력 된다면 그 수만큼 전부 한수가 된다.
또한, 1000은 한수가 아니기 때문에 고려 대상에서 같이 제외하였다.

따라서, 이 문제 풀이 핵심은 100 ~ 999까지의 한수를 구하는 것이다.
100 ~ 999까지 한수를 구하기 위해서는 우선 각 자리수를 구해야 하고, 각 자리수의 차가 동일한지 확인 하여야 한다.

 

#include<iostream>
#define IOS_PREDEFINE() \
( \
    (cin.tie(NULL)), \
    (cout.tie(NULL)), \ 
    (std::ios::sync_with_stdio(false)), \
    (void) 0 \
)
using namespace std;
bool getHan(int n)
{
    int arr[3] = {0,};
    int reminder = n, idx = 0;
    bool isHan = false;
    while(reminder)
    {
        arr[idx++] = reminder % 10;
        reminder /= 10;
    } 
    if( (arr[0] - arr[1]) == (arr[1] - arr[2]))
    {
        return true;
    }
    return false;
}
int main()
{
    IOS_PREDEFINE();
    int target = 0;
    cin >> target;
    int han = 0;
    for(int idx = 1; idx <= target; idx++)
    {
        if (idx < 100) 
        {
            han++;
            continue;
        }
        if(idx == 1000)
            break;
        if (true == getHan(idx))
        {
            han++;
        }
    }
    cout << han << '\n';
    return 0;
}