등차수열 = 연속된 두 개의 수의 차이가 일정한 수열 예) [ 1, 1, 1 ] , [ 1, 2, 3 ] , [ 1, 3, 5 ], 등
1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력
[입력]
: 첫 번째 줄 1,000보다 작거나 같은 자연수 N
[출력]
: 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력
[참고]
1. 일의 자리 숫자 / 십의 자리 숫자는 무조건 한수이다 (1~99까지는 한수 99개)
1의 자리 숫자 자릿수가 1개 뿐이라 비교될 숫자가 없어서 그 자체로 수열 ex) 1 ▶ 즉 한수이다 ( 공차 없음 )
10의 자리 숫자 자릿수가 2개 뿐이라 어차피 비교 대상은 하나이기 때문에 일정한 공차를 가진다 ex) 16 ▶ 한수 ( 공차 = 5 ), 98 ▶ 한수 ( 공차 = -1 )
2. 백의 자리 숫자부터 계산할 것
100의 자리라면?
- 공차 범위: - 4 ~ 4
- 범위가 1000까지인데 1000은 한수가 아니므로 111 ~ 999까지 검사하면 된다
[코드]
import java.util.*;
import java.io.*;
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());
if(n>=100){
if(n==1000){
n = 999;
}
int count = 99;
for(int i =100; i<= n; i++){
int hundred = i/100;
int ten = (i/10)%10;
int one = i%10;
if(hundred - ten == ten - one)
count++;
}
System.out.println(count);
}
else
System.out.println(n);
}
}
[해설]
: BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
: int n = Integer.parseInt(br.readLine()); 첫번째줄 입력
: if(n>=100){ 100의 자리 이상 수라면
if(n==1000){ 1000일 경우 1000은 한수가 아니므로 999로 생각하고 진행할 것 n = 999; }
int count = 99; 10의 자리까지는 한수 개수 99 for(int i =100; i<= n; i++){ int hundred = i/100 100의 자리 숫자
int ten = (i/10)%10; 10의 자리 숫자
int one = i%10; 1의 자리 숫자
if(hundred - ten == ten - one) 연속되는 숫자의 공차가 서로 같다면 한수 카운트 count++; }
System.out.println(count); 한수 출력 }
: else System.out.println(n); 숫자가 100 미만이면 n 출력
이제 풀어보러 갈께요 :)
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *