본문 바로가기
코딩공부/백준 (java)

[백준 1065] 한수 (java)

by CodingKwon 2021. 7. 8.

문제 링크

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

 

나의 코드 (java)

import java.util.Scanner;

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

        // 입력값 받기
        int num = sc.nextInt();

        // 한수 검사
        int result = han(num);

        // 결과 출력
        System.out.println(result);
    }

    public static int han(int num){
        // 한수를 카운팅 할 변수
        int cnt = 0;

        // 0~99는 각 자리수가 등차수열을 이룬다.
        // ex) 11, 12, 13, 22, 24, 60 ...
        if (num < 100){
            cnt = num;
        } else {
            // 100이상부터는 한수를 99개는 깔고 시작한다.
            cnt = 99;

            // 1000은 한수가 될 수 없기 때문에 999까지만 검증하면 된다.
            if(num == 1000){
                num = 999;
            }
            // 100부터는 각 자리수를 구해야함.
            for (int i=100; i<=num; i++){
                // 여기부터는 입력값이 3자리이다.
                // 백의 자리 구하기
                int num_100 = i/100;
                // 십의 자리 구하기
                int num_10 = (i/10) % 10;
                // 일의 자리 구하기
                int num_1 = i%10;

                // 백의 자리와 십의 자리 차이, 십의 자리와 일의 자리 차이가 같으면 카운팅
                if ((num_100 - num_10) == (num_10 - num_1)){
                    cnt++;
                }
            }
        }
        // 한수 개수 반환
        return cnt;
    }
}

 

한수는 각 자릿수가 등차수열일 때 이를 한수라고 합니다.

 

그렇다면 1~99는 모두 한수입니다.

ex) 11, 12, 13, 22, 24, 60...

이제 1~99의 수가 들어오면 모두 한수로 카운트합니다.

 

그럼 100 이상의 값이 들어온다면 백의 자리, 십의 자리, 일의 자리를 검증합니다.

(백의 자리 - 십의 자리), (십의 자리 - 일의 자리)가 같다면 한수입니다.

 

1000은 한수가 될 수 없기 때문에 1000이 입력값으로 들어온다면 999로 바꾸어서 처리합니다.

댓글