1. 1<=N<=1000을 만족하는 N을 입력받는다.
2. 한수인지 판단하는 데에 사용할 N+1 크기의 boolean형 배열을 생성한다.
3. 인수로 들어온 수가 한수인지 판단하는 함수를 구현한다. 1부터 N까지를 함수의 인자로 넘겨준다.
!! 이때 함수의 인자로 들어가는 수는 아무리 커도 1000을 넘지 않는다.
이것은 한수인지 판단할 숫자가 아무리 커도 1000을 제외하고는 한자릿수거나 두자릿수 또는 세자릿수라는 뜻이다.
한수의 정의는 어떤 숫자 X의 각 자리가 등차수열을 이루는 수인데,
한자릿수거나 두자릿수인 수는 한수인지 검사해볼 필요도 없이 한수이다.
따라서 함수로 들어온 인자가 세자릿수 이상인 경우에만 한수인지를 검사하도록 함수를 짰다.
3-1. 함수의 인자가 세자릿수 이상이라면 각 자리수가 등차수열을 이루는지 검사한다. 등차수열이라면 true를 반환.
3-2. 함수의 인자가 한자릿수거나, 두자릿수일 때, 세자릿수 이상이지만 등차수열이 아닐 때는 false를 반환.
4. 한수인지 판단하는 함수에 1부터 N을 넣고 한수일 때마다 카운트를 증가시킨다.
5. 한수의 개수를 출력한다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // N을 입력받는다
int cnt=0; // 한수의 개수를 셀 변수
boolean[] arr = new boolean[N+1]; // 한수인지 체크할 배열
for(int i=1;i<arr.length;i++){ // 1부터 N까지
if(IsArithmeticSequence(i)) cnt++; // 한수인지 함수에 넣어 검사해보고 한수면 카운트 증가
}
System.out.println(cnt); // 한수의 개수 출력
}
public static boolean IsArithmeticSequence(int n){
if(n/100!=0){ // 인자로 들어온 수가 세자릿수 또는 1000
int a = n/100; // 백의자리
int b = (n%100)/10; // 십의자리
int c = n%10; // 일의자리
if(a-b==b-c) return true; // 각 자리수가 등차수열이면 true를 반환
else return false; // 아니면 false를 반환
}
return true; // 한자릿수, 두자릿수면 바로 false를 반환
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 10870 : 피보나치 수 5 JAVA 풀이 (0) | 2022.05.22 |
---|---|
[백준] 10872 : 팩토리얼 JAVA 풀이 (0) | 2022.05.21 |
[백준] 4673 : 셀프 넘버 JAVA 풀이 (0) | 2022.05.21 |
[백준]15596 : 정수 n개의 합 JAVA 풀이 (0) | 2022.05.21 |
[백준] 9020 : 골드바흐의 추측 JAVA 풀이 (0) | 2022.05.21 |