ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 한수 (Java)
    Computer Science/Algorithm, Data Structure 2019.02.18 22:08

    문제: 어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 


    등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때,


    1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.


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


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


    예제 입력: 110


    예제 출력: 99


    풀이


    예를 들어, 123이라는 세자리 수는 100의 자리수, 10의 자리수, 1의 자리수 각각 1이라는 공차를 가진다.


    즉 세 자리수는 각 자리수를 쪼갠 후 각 자리 수의 차이를 확인해서 같으면 한수다. 


    또한 예제 입력과 출력을 살펴보면 110을 입력했을 때


    99개가 출력되었으므로 1~99까지 모두 한수이다. (100~110 한수없음)


    CheckNumber 메서드로 등차수열 특성을 이용하여 한수를 판별한다. 


    N이 1000일 경우에는 한수가 아니지만 CheckNumber 값이 1이므로 cnt 값을 1 줄여준다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import java.util.Scanner;
     
    class Main
    {
        public static void main (String[] args)
        {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            
            if(N < 100){
                System.out.println(N);
            } else {
                int cnt = 99;
                for(int i=100; i<=N; i++){
                    cnt += CheckNumber(i);
                }
                if(N == 1000) cnt--;
                System.out.println(cnt);
            }
            
            
        }
        
        public static int CheckNumber(int number){
            int num1 = number / 100 % 10;
            int num2 = number / 10 % 10;
            int num3 = number % 10;
            
            if(num2 * 2 == num1+num3){
                return 1;
            }
            return 0;
        }
    }
    cs


     



    댓글 0