본문 바로가기

[백준 1065] 함수 '한수' - 자바 (java)

한수

 

<문제풀러 가기>

 

1065번: 한수

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

www.acmicpc.net


문제

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

풀이방법

풀이 방법

'한수' - 각 자리수가 등차수열인 숫자
	
    	* 등차수열 - 연속된 두개의 수 차이가 일정한 수열
        ex) 321 (공차 1), 357 (공차 2), 840 (공차 -4)
            100 이하는 모두 공차 3자리 수 부터 구분이 가능
            
접근방법
	-> 1자리(1~9), 2자리(10~99)는 모두 공차로 포함
    -> 100 이상부터는 100의 자리, 10의 자리, 1의 자리로 구분
    -> (100, 10 자리 수 차이) ==  (10, 1의 자리 수 차이) 동일하면 공차

입력

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

출력

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

예제 입력 1

110
1
210
1000

예제 출력 1

99
1
105
144

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] temp = new int[3];

        int count = 0;
        for (int i = 1; i <= num; i++) {
            if (i < 100)
                count++;
            else {
                int a = i / 100;
                int b = (i % 100) / 10;
                int c = (i % 100) % 10;
                if(a - b == b-c)
                    count++;
            }
        }

        System.out.println(count);
    }
}