[BOJ] 1065번: 한수 (C#)

Pilgyeong_G·2020년 7월 27일
0

BOJ

목록 보기
6/9
post-thumbnail

문제 링크: 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;
    }
}

0개의 댓글