이름: 한수
분류: 브루트포스
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
두자리수까지는 문제에서 말하는 "한수"에 해당하기 때문에 만약, 자연수 N이 두자리수 보다 작거나 같다면 출력값은 N이다.
자연수 N이 세자리 이상이라면 각 자리마다 차이를 구한뒤 나온 값들이 모두 같은지를 비교하면 된다. 값들이 모두 같다면 카운팅 하고, 같지 않다면 카운팅하지 않는다.
import java.util.Scanner;
public class Hansu {
public static int calculation(int num){
int numOfhansu=0;
//num이 두자리수 이하면, num 리턴
if((int)(Math.log10(num)+1)<=2){
numOfhansu=num;
}
//세자리수 이상이면
else{
numOfhansu=99;
for(int i=100;i<=num;i++){
int[] arr=new int[(int)(Math.log10(i)+1)];
int tmp=i;
boolean flag=true;
//각 자리의 수를 배열에 넣어준 다음
for(int j=0;j<(int)(Math.log10(i)+1);j++){
arr[j]=tmp%10;
tmp/=10;
}
//자리 간 차이를 계산에 배열에 넣어주고
for(int j=0;j<(int)(Math.log10(i)+1)-1;j++){
arr[j]=arr[j]-arr[j+1];
}
//차이 값들을 비교해 다른게 있다면 카운팅하고
for(int j=0;j<(int)(Math.log10(i)+1)-2;j++){
if(arr[j]!=arr[j+1]) flag=false;
}
//차이 값들 모두가 일치하면 카운팅한다
if(flag==true) numOfhansu++;
}
}
return numOfhansu;
}
public static void main(String[] args){
int num,result;
Scanner scan=new Scanner(System.in);
num=scan.nextInt();
result=calculation(num);
System.out.print(result);
}
}