-
문제
어떤 양의 정수 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