한수
한수
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.
N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
110
출력
99
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
bw.write(check(n) + "\n");
bw.flush();
br.close();
bw.close();
}
static int check(int n) {
int count =0; //정해진입력값에서 한수가 몇개인지
int a[] = new int[3]; //100~ 999자리수를 저장하기위한 배열
for(int i=1; i<=n; i++) {// 1~ 입력만큼
if(i < 100 ) count = i; //1~99는 모두 한수
else if(i == 1000) break; //1000은 한수가 아님
else {
int k = 0, t = i;
while (t > 0) { //일의자리수를 배열에 넣기위한 로직
a[k] = t % 10;
t /= 10;
k++;
}
if (a[0] - a[1] == a[1] - a[2]) //공차가 같으면 한수
count++;
}
}
return count;
}
}
처음에는 문제 이해를 못하였는데 입력값으로 주어진 수 만큼 예를 들어 110이면 1~110만큼 수 중에
한수 즉 123 같이 각 자리의 수만봤을때 1 2 3 이 1씩증가되있으므로 등차수열에 성립이 된다하여
123은 한수에 포함이 된다.