import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(ariSequence(Integer.parseInt(br.readLine())));
br.close();
}
private static int ariSequence(int N) {
int count;
if (N < 100) {
return N;
} else {
count = 99;
for (int i = 100; i < (N + 1); i++) {
int hundred = (i / 100);
int tens = (i / 10) % 10;
int ones = (i % 10);
if ((hundred - tens) == (tens - ones)) count++;
}
}
return count;
}
}
문제를 얼핏봐서는 등차 수열문제인줄 알았는데 막상 구현하려고보니 무슨 말인지 당최 이해가 되지않았다.
문제에서는 수열이 주어지지않는다. 입력값은 하나.
즉 이 수를 구성하는 수가 등차수열인지 알아보는 것이다.
135 -> 1, 3, 5 (공차가 2인 등차수열) => 한수 ⭕️
138 -> 1, 3, 8 (+2, +6) => 한수 ❌
그럼 일의자리와 십의자리는? 그냥 그 자체로 한수가 되어버린다 😅
그래서 한수를 구하는 함수를 구현하면
if (N < 100) {
return N;
}
100 미만인 경우에는 그냥 들어온 수를 반환하면된다.
1부터 N까지의 한수 갯수는 100이하에서는 모든 수가 만족하니까
} else {
count = 99;
for (int i = 100; i < (N + 1); i++) {
int hundred = (i / 100);
int tens = (i / 10) % 10;
int ones = (i % 10);
if ((hundred - tens) == (tens - ones)) count++;
}
}
return count;
일단 100 이상이면 1~99는 만족하기때문에 99개의 카운트를 가지고 시작한다.
100이상인 경우는 일의자리, 십의자리, 백의자리를 구한 후 순서대로 차를 구해서 등차가 성립되는지 보면된다.