문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제입출력
풀이
이번 문제는 문제는 어렵지 않았는데, 문제 자체를 이해하는데 힘들었다. 구글링을 해보니 나뿐만 아니라 헷갈려하는 사람이 여럿 있었다. 이 문제는 주어진 경우에 대해 모두 결과를 내야하므로 완전 탐색 유형의 문제이다.
소스코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class Main2 {
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());
int totalCount = 0;
for(int i=n; i>=1; i--) {
if(n<10) {
totalCount = n;
break;
}
if(n>=10 && n<=99) {
totalCount = n;
break;
}
if(i<=99) {
totalCount += 99;
break;
}
String[] str = String.valueOf(i).split("");
int[] box = new int[str.length];
for(int j=0; j<str.length; j++) {
box[j] = Integer.parseInt(str[j]);
}
int a, b, c;
//4자리 = 1000
if(str.length == 4) {
a = box[1]-box[0];
b = box[2]-box[1];
c = box[1]-box[0];
if(a==b && b==c) {
totalCount++;
}
}
if(str.length == 3) {
a = box[1]-box[0];
b = box[2]-box[1];
if(a==b) {
totalCount++;
}
}
}
bw.write(String.valueOf(totalCount));
bw.flush();
bw.close();
}
}