본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1065 한수

by 까망 하르방 2021. 2. 22.
반응형

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

 Input 
110

 Output 

99

어떤 양의 정수 X의 자리수가 등차수열을 이루면 『한수 라고 합니다.

※ 등차수열: 연속된 두 개의 수의 차이가 일정한 수열.

ex) [123]: 1   3   ▶ +1

ex) [531]: 5  3  1   ▶ -2

ex) [222]: 2   2   ▶ +0

주어진 수를 한자리씩 비교하여 등차수열을 이루고 있는지 확인. 

 


import java.util.Scanner;
 
public class Main {
    public static int checkNumberLength(int num) {
        int len = 0;
        while (true) {
            int temp = num / 10;
            len++; // 자릿수 증가!
            if (temp == 0) {
                break;
            }
            // 확인할 자릿수를 한개씩 줄여나간다.
            num = num / 10;
        }
        return len;
    }
 
    public static boolean solutionFunc(int num) {
        boolean result = true;
        // 우선 입력 받은 숫자의 자릿수를 파악한다!
        int digit = checkNumberLength(num);
 
        // 파악한 자릿수를 이용하여 해당 숫자가 등차수열로 구성되어 있는지 판단.
        if (digit == 1 || digit == 2) { // 1의 자릿수 혹은 2의 자릿이면 무조건 true
            return result;
        }
 
        // 문제 규정상 최대로 입력받는 수는 1000이므로 digit의 maximum value는 4이다!
        // 3 <= digit <= 4일때만 동작하게 된다!
        int[] arr = new int[digit];
        for (int i = digit - 1; i > 0; i--) {
            arr[i] = (int) (num / Math.pow(10, i));
            num = num - (arr[i] * (int) Math.pow(10, i));
        }
        arr[0] = num % 10;
 
        int cri = arr[1] - arr[0]; // 처음 2의 자릿수 - 1의 자릿수를 기준으로 삼는다!
        for (int i = 1; i < arr.length - 1; i++) {
            int temp = arr[i + 1] - arr[i];
            if (temp != cri) // 값이 다르다면 등차수열이 아닌 것이다!{
                return false;
        }
        return result;
    }
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        // 범위를 정할 변수n 입력받는다.
        int n = sc.nextInt();
 
        // 문제에서 요구하는 것의 갯수를 담당할 변수를 적용한다.
        int count = 0;
 
        // 1~n 까지 등차수열로 구성된 숫자를 판단한다.
        for (int i = 1; i <= n; i++) {
            // 해당 숫자를 함수를 통해 판단한다!
            if (solutionFunc(i)) {
                count++;
            }
        }
        // 결과 출력
        System.out.println(count);
    }
}

 

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1012 유기농 배추  (0) 2021.02.22
[BOJ] 백준 1759 암호 만들기  (0) 2021.02.22
[BOJ] 백준 17281 ⚾  (0) 2021.02.22
[BOJ] 백준 1764 듣보잡  (0) 2021.02.22
[BOJ] 백준 17070 파이프 옮기기 1  (0) 2021.02.22

댓글