백준 - 1065번(한수)

최지홍·2022년 1월 27일
0

백준

목록 보기
5/145

문제 출처: https://www.acmicpc.net/problem/1065


문제

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

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int target = Integer.parseInt(reader.readLine());
        System.out.println(calc(target));
    }

    private static int calc(int target) {
        int answer = 99;

        if (target < 100) {
            return target;
        } else {
            for (int i = 100; i <= target; i++) {
                int temp = i;
                int initialValue = temp % 10 - temp / 10 % 10; // 100 -> 0과 0(마지막 - 두번째)
                boolean flag = true;
                temp /= 10; // 10
                while (temp >= 10) {
                    int x = temp % 10; // 0
                    int y = temp / 10; // 1
                    if (initialValue != (x - y)) {
                        flag = false;
                        break;
                    }
                    temp /= 10;
                }

                answer = flag ? answer + 1 : answer;
            }
        }

        return answer;
    }

}

  • 두 자리 정수까지는 해당 숫자가 곧 갯수가 된다.
  • 세 자리 정수부터는 각 자리수 별로 인접한 수와 차이를 구하여 한수의 숫자를 구하였다.
  • 반복문 시작 전 1의 자리 숫자와 10의 자리 숫자의 차이를 계산하여 초기값을 정한다.
  • 반복문에서는 10의 자리 숫자 이상부터 상위 자리 숫자와의 차이를 구하여 차이가 있을 경우 반복문을 탈출한다.
profile
백엔드 개발자가 되자!

0개의 댓글