[BAEKJOON] 백준 1065: 한수 (C#)

2024. 5. 31. 16:25IT/BaekJoon

문제 링크

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

 

 

문제

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

 

 

입력

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

 

 

출력

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

 

 

 

통과한 답안

namespace _1065
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
            int cnt = 0;

            for (int i = 1; i <= N; i++)
            {
                if (IsHansu(i))
                {
                    cnt++;
                }
            }
            Console.WriteLine(cnt);
        }

        static bool IsHansu(int n)
        {
            if (n < 100)
            {
                return true;
            }

            string s = n.ToString();

            for (int i = 0; i < s.Length - 2; i++)
            {
                if (s[i + 1] - s[i] != s[i + 2] - s[i + 1])
                {
                    return false;
                }
            }

            return true;
        }
    }
}

 

n이 주어졌을 때, 1부터 n까지 숫자들 중에서 한수를 찾는 문제이다.

한수란 X라는 수가 주어졌을 때, X를 구성하는 각 자리가 등차수열을 이루는 수를 말한다.

예를 들어서 1자리 숫자인 1 ~ 9는 1개만 숫자가 존재하므로 모두 한수이다.

2자리 숫자의 경우에는 비교할 대상이 없으므로 a와 a + d만 존재하므로 모두 한수이다.

3자리 숫자부터 비교할 수 있는데,

a, a + d, a + 2d

를 만족해야 하므로

for (int i = 0; i < s.Length - 2; i++)
{
    if (s[i + 1] - s[i] != s[i + 2] - s[i + 1])
    {
        return false;
    }
}

 

라고 적을 수 있다.