문제 링크: https://www.acmicpc.net/problem/1065
한수: 어떤 양의 정수 X의 각 자리가 등차수열을 이루는 수
등차수열: 연속된 두 개의 수의 차이가 일정한 수열
예를 들어 123은 각 자릿수가 왼쪽에서 오른쪽으로 1씩 커지는 등차수열을 이루고 있기 때문에 한수이다.
101은 일정하게 커지는 수가 아닌 1 작아졌다가 1 커지기 때문에 등차수열로 이루어져있지 않다.
한수인지 아닌지를 판별하는 방법은 다음과 같다.
100의 자리 미만은 비교할 수가 두 자리밖에 없으므로 전부 등차수열 처리되어 true를 반환해야 한다.
문제에서 입력으로 들어오는 최대 수는 1000까지이다. 근데 1000은 한수가 아니므로 999까지만 확인해보고 이외의 수는 전부 false를 반환한다.
먼저 각 자리수를 10씩 나눠서 배열에 넣는다.
배열의 요소는 3개밖에 없으므로 if문을 통해 각 자릿수의 등차수열 관계를 확인해서 맞으면 true, 아니면 false를 반환한다.
using System;
internal class Program
{
private static void Main()
{
int max = int.Parse(Console.ReadLine());
int count = 0;
for (int i = 1; i <= max; i++)
{
if (IsHanNumber(i))
{
count++;
}
}
Console.WriteLine(count);
}
private static bool IsHanNumber(int n)
{
if (n >= 1000)
{
return false;
}
else if (n < 100)
{
return true;
}
int[] split = new int[3];
int i = split.Length - 1;
while (n != 0)
{
split[i] = n % 10;
n /= 10;
i--;
}
if (split[0] - split[1] == split[1] - split[2])
{
return true;
}
return false;
}
}