문제 출처 https://www.acmicpc.net/problem/1065
내가 작성한 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static int one(int n) {
int count=0;
if(n <100) { //100보다 작은 숫자면 그 수 그대로 출력하면 된다.
return n;
}
else{ //100보다 큰 수이면
count =99; //카운트를 99개 부터 시작
for(int i=100; i<n+1; i++) {
int a = i/100; //백의자리
int b = (i%100)/10; //십의자리
int c = (i%100)%10; //일의자리
if((a-b)==(b-c)) {
count++;
}
}
}
return count;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(one(Integer.parseInt(br.readLine())));
}
}
접근 방법
한수는 234, 258처럼 각 숫자 사이에 차이가 일정한 수열을 이루는 숫자를 의미한다.
1부터 9까지의 수는 그 숫자 자체로 수열이고 28은 두자리수의 차이 6이므로 숫자 자체가 수열이기 때문에 모두 한수이다.
세 자리수의 한수는 258 각 자리수가 3씩 차이 난다. 백,십,일 의자리수를 구해서 2-5 = -3 그리고 5-8 = -3 이렇게 순서대로 빼준 후 차이가 같으면 count에 1을 더해준다.
세자리 수는 입력 받은 수까지 한수의 개수를 구하기 위해 1-99까지 99개를 포함해야 하므로 count를 99부터 시작한다.