문제

어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.



--------------------------------------------------------------------------------------------------------------------


문제 이해하는데 오래걸렸다. 


연속된 숫자의 차이가 일정한 수열은 등차수열. 그 갯수를 출력하는 프로그램이다.


등차수열이란 ????

한자리의 숫자는 무조건 등차수열 1~9     

두자리의 숫자도 무조건 등차수열 10~99

     ex) 46  -> 4 에서 6까지 2의 차이


세자리는 계산이 필요하다.

ex)

1 3 5    -> 일정하게 2의 차이

1 3 6    -> 2와 3.  (등차수열 x)

4 4 4    -> 일정하게 0의 차이

1 2 3    -> 일정하게 1의 차이

7 4 1    -> 일정하게 3의 차이



숫자 777이 입력되었을 때 1 부터 777까지의 숫자가 등차수열인지 아닌지 구해서 등차수열이면 그 수를 구하는 프로그램이다. 

즉, 숫자하나 하나 자리수를 잘라서 앞뒤 비교하란 얘기, 시작할 때 1과 2를 비교하는게 아니라 1 하나만 등차수열인지 구하는거다


<풀이>


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
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int count = 0;
 
        // 입력받은 수만큼 loof
        for(int i = 1; i <= num; i++) {
            if(getHansuChk(i)) {    // 등차수열이면 count++
                count++;
            }
        }
        System.out.println(count);
    }
 
    // 등차수열인지 체크하는 함수
    public static boolean getHansuChk (int num) {
        
        boolean hansuResult = true;
        
        // 숫자를 배열에 자릿수대로 담기
        String temp     = Integer.toString(num);
        int length         = temp.length();
        int[] digitsArr = new int[length];
        
        for(int i=0; i<length; i++) {
            digitsArr[i] = temp.charAt(i)-'0';
        }
        
        // 두자리 이하는 다 등차수열에 만족하므로 한수임 (3자리이상만 계산하면 된다.)
        if (num > 99 && num <= 1000) {
            
            int firstValue     = 0;
            int tempValue     = 0;
            
            // 자리수 만큼 loof 돌면서 앞뒤자리 차이를 비교
            for(int i=0; i<length-1; i++) {
                firstValue = digitsArr[i] - digitsArr[i+1];
                
                if(i != 0 && firstValue != tempValue) {    // 한수가 성립되지 않으면 break
                    hansuResult = false;
                    break;
                }
                tempValue = firstValue;
                
            }
        }
        return hansuResult;
    }
}
 
cs







+ Recent posts