함수 - 마지막 단계 1065

김지훈·2020년 7월 31일
0

백준-1065 한수

문제

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

입력

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

출력

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

코드

import java.util.*;

public class Main {

    public static boolean d(int num) {
        if (num < 100) {
            return true;
        }
        boolean check = false;
        String temp = Integer.toString(num);
        int[] digits = new int[temp.length()];
        String[] s = temp.split("");
        for (int i = 0; i < s.length; i++) {
            digits[i] = Integer.parseInt(s[i]);
        }
        for (int i = 0; i < s.length - 2; i++) {
            if (digits[i] - digits[i + 1] == digits[i + 1] - digits[i + 2]) {
                check = true;
            } else {
                return false;
            }
        }

        return check;
    }

    public static void main(String[] args) {
        int N, count = 0;
        Scanner scan = new Scanner(System.in);
        N = scan.nextInt();
        for (int i = 1; i <= N; i++) {
            if (d(i)) {
                count++;
            }
        }
        System.out.println(count);
    }
}

메인 메소드 : 루프를 돌면서 d함수를 호출한 뒤 리턴 값이 true면 count++ 해준다. 최종적으로 count를 출력한다.

d 메소드 : 한수인지 아닌지 판별하는 함수이다.
100보다 작은 자연수는 무조건 한수이므로 true를 리턴해준다.
100의 자리 숫자와 10의자리 숫자의 차이, 10의 자리 숫자와 1의 자리 숫자의 차이가 같다면 true를 반환해 준다. 1000보다 작거나 같은 자연수N이라고 하여 코드를 이렇게 짜지 않으려 했지만, 이렇게 짜면 유지보수가 가능해보여 그냥 이렇게 짰다!

0개의 댓글