BAEKJOON/단계별로 풀어보기

[BOJ] 1065번 : 한수

말하는 알감자 2022. 8. 2. 21:10

🔒 문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

⌨ 입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

🖨 출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

📚 예제

Ex1)

110

99

Ex2)

1

1

Ex3)

210

105

Ex4)

1000

144

Ex5)

500

119

🔑 c언어 코드

#include<stdio.h>

int count(int N);

int main()
{
    int N;
    scanf("%d", &N);
    printf("%d", count(N));
    return 0;
}

int count(int N)
{
    int ans;
    int k[4];

    if (N < 100) // 세자리수 미만의 수는 모두 등차수열 이룸
        ans = N;
    else
    {
        ans = 99;
        for (int i = 100; i < N + 1; i++)
        {
            int a = i;
            int j = 0;
            while (a != 0)
            {
                k[j++] = a % 10;
                a /= 10;
            }
            if (j == 3) // 3자리 수 자연수
            {
                if (k[1] * 2 == (k[0] + k[2]))
                    ans++;
            }
            else // 1000때문에 만들었다! 이거 아니었으면 훨씬 짧았는데,,,
            {
                if ((k[0] + k[3]) == (k[1] + k[2]))
                    ans++;
            }
        }
    }

    return ans;
}