백준 온라인 저지 문제풀이/JAVA
[baekjoon 1065번] 함수 - 한수
Good Program Good Programmer
2020. 12. 2. 12:23
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
문제풀이
1. 각 자리수를 배열에 저장한다.
2. 자릿수가 3미만이면 그 수는 한수이다.
3. 자릿수가 3이상인 수의 각 자릿수들 간의 공차를 확인한다.
4. 만약 공차가 모두 같다면 그 수는 한수이지만 공차가 하나라도 다르다면 그 수는 한수가 아니다.
5. 그렇게 n까지의 수들 중 한 수가 몇 개 있는지 세서 출력한다.
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
import java.io.*;
import java.util.StringTokenizer;
public class Main {
// 자릿수를 구하는 함수
int[] dn(int n) {
int digits = 0;
// 1. 자릿수를 구한다.
while(n % Math.pow(10,digits++) != n);
digits--;
int[] digits_num = new int[digits];
// 2. 각 자릿수를 배열에 저장한다.
for(int i = digits-1 ; i >= 0 ; i--) {
digits_num[i] = (int) (n / Math.pow(10,i));
n %= Math.pow(10,i);
}
// 3. 각 자릿수를 포함한 배열을 리턴한다.
return digits_num;
}
/*
1. 자연수 n을 입력받는다.
2. 자연수 n보다 작거나 같을 때까지 반복문을 실행한다.
3. 각 자릿수를 배열로 받아온다.
4. 자릿수가 3보다 작다면 그 수는 한수이다.
5. 자릿수가 3보다 크면 각 자릿수들 간의 공차를 계산한다. 이때 공차가 다르다면 해당 수는 한수가 아니다.
6. 각 자릿수의 공차가 모두 같다면 그 수는 한수이다.
*/
public static void main(String[] args) throws IOException {
Main main = new Main(); // d(n)을 실행시킬 객체
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1.
int n = Integer.parseInt(new StringTokenizer(br.readLine()).nextToken());
int[] digits_num; // 자릿수를 보관하는 배열
int flag; // 해당 수가 한수인지 아닌지 판별하는 변수
int cnt = 0; // 한수의 갯수를 세는 변수
// 2.
for(int i = 1; i <= n ; i++ ) {
flag = 0;
// 3.
digits_num = main.dn(i);
// 4.
if(digits_num.length < 3) {
cnt++;
continue;
}
// 5.
for (int j = 0; j < digits_num.length-2 ; j++) {
if(digits_num[j+1] - digits_num[j] != digits_num[j+2] - digits_num[j+1]) {
flag = 1;
break;
}
}
// 6.
if(flag == 0) cnt++;
}
System.out.println(cnt);
}
}
|
cs |