Problem Description

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

  • 입력 -> 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
  • 출력 -> 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

등차수열(arithmetic sequence)은 연속하는 두 항의 차이가 모두 일정한 수열을 뜻한다.

1,000보다 작은 자연수 N이 입력되기 때문에 단위에 따라 구분지어 생각해보자.

  • 입력된 자연수 N이 100보다 작은경우는 1 ~ 99 까지는 전부 수 자체가 수열을 만족하기 때문에 입력한 자연수 N을 그대로 return 해주면된다.
  • 입력된 자연수 N이 100보다 큰 경우에는 count변수를 99로 초기화시킨 이후 각 자릿수를 꺼내어 차이가 동일하다면 count변수를 1증가 시켜준다.

Code block

A Java Example:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println(arithmeticSequence(sc.nextInt()));

        sc.close();

    }
    public static int arithmeticSequence(int number){
        //한수의 개수 초기화
        int count = 0;

        if(number < 100){
            return number;
        }
        else{
            //100이상이면 한수의 개수를 99로 초기화
            count = 99;

            for(int i = 100; i <= number; i++){
                int a = i / 100; //100의 자리
                int b = (i / 10) % 10; //10의 자리
                int c = i % 10; //1의자리

                //연속하는 두항의 차이가 같다면 count++
                if((a - b) == (b - c)){
                    count++;
                }
            }
        }

        return count;
    }
}