ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 한수
    알고리즘 2024. 3. 25. 00:28

    문제

    어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.

    N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

    풀이

    N은 1000보다 작다는 조건이 있다.
    여기서 눈 여겨 볼 점은 1, 2의 자리수는 모두 등차수열이다.
    한자리수는 공차가 0인 등차수열이고,
    두자리수는 모두 공차를 하나 대입해서 이루어지는 등차수열이다.

    제일 큰수인 1000은 한수가 되지 못하므로 결과적으로는 3자리수만 판별하면 된다.

    자릿수를 판별하기 위해서 각 자릿수를 쪼개야 한다.
    인위적으로 %와/을 이용하여 하기 보다는 간단히 스트림을 이용하여 정수 배열을 만들었다.

    만일 배열에 `1, 2, 3` 이라는 값이 담겨있다면 등차수열 판별은 다음과 같다.
    1 + 3 == 2 *2 이다.
    즉, 백의 자리와 일의 자릿수를 더한 값이 십의 자릿수의 2배가 되면 된다.
    이 조건으로 참 거짓을 가리면 된다.

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class Main {
        public static void main(String[] args) throws Exception {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int num = Integer.parseInt(br.readLine());
    
            if (num < 100) {
                System.out.println(num);
                return;
            }
    
            int result = 99;
    
            for(int i = 100; i <= num; i++) {
                if (isContinue(i)) {
                    result++;
                }
            }
    
            System.out.println(result);
        }
    
        static boolean isContinue(int num) {
            int[] arr = Arrays.stream((num + "").split(""))
                    .mapToInt(Integer::parseInt)
                    .toArray();
    
            return (arr[0] + arr[2]) == arr[1] * 2;
        }
    }
    728x90

    '알고리즘' 카테고리의 다른 글

    [BOJ] 등수구하기  (0) 2024.03.26
    [BOJ] 킹  (0) 2024.03.26
    [BOJ] 체스판 다시 칠하기  (0) 2024.02.05
    [BOJ] 배열합치기  (0) 2024.01.13
    [BOJ] 사이버개강총회  (1) 2023.12.23

    댓글

Designed by Tistory.