모름

 

1065번: 한수

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

www.acmicpc.net

문제

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

입력

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

출력

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

 

코드

using System;

class Program {


    static void Main()
    {
    	//n을 입력받고 n까지의 수만큼 한수인지 판별하여
        //판별된 개수를 출력한다.
        int n = int.Parse(Console.ReadLine());
        int count = 0;

        for (int i = 1; i < n+1; i++)
        {
            if (IsHanSu(i.ToString())) count++;
        }

        Console.WriteLine(count);
    }
    
    //한수를 구하는 공식
    static bool IsHanSu(string num)
    {
        //두 자리 수 이하는 모두 한수
        if (int.Parse(num) < 100) return true;
        
        //세 자리 수의 한수 판별
        int[] numbers = new int[num.Length];
        for (int i = 0; i < num.Length; i++)
        {
            numbers[i] = int.Parse(num[i].ToString());
        }

        if (numbers[0] - numbers[1] == numbers[1] - numbers[2])
        {return true;}
        else
        {return false;}
    }
}​

설명은 주석에, 이 문제에서 어려운 점은 한수의 설명이 모호하다는 점이다. 예시라도 하나 들어줬으면 확실하게 이해했을텐데, 처음 한수의 설명을 듣고 이해가 어려웠다.

 

한수는 양의 정수 X의 자리수가 등차수열을 이루는 수를 의미한다. 예를 들면 123,369,1357 등이 있다. 단, 헷갈리는 부분은 두자리수 이하의 정수는 한수라고 말할 수 있을까? 59,26,35... 예를 들어 35라면 초항이 3, 공차가 2인 등차수열이다. 한자리수 정수는 한수일까? 8이면 초항이 8, 공차가 0인 등차수열이다.

 

그렇다면 100미만의 모든 수는 한수임을 알 수 있다. 남은 일은 세 자리 수에 이상에 한해, 이게 한수인지 아닌지 판별을 해야한다. 자릿수별 차이값이 같은지 비교하면 입력된 수가 한수인지 아닌지 판별할수있다. 이를 함수화하여 표현하면 깔끔하게 코드를 짤 수 있다.

 

콘솔출력화면

정상출력된다!