Jun's Development Journey

[BOJ] 1065번 한수 본문

BOJ/BruteForce

[BOJ] 1065번 한수

J_Jayce 2019. 7. 29. 10:49

문제

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

 

풀이 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
import java.util.*;
public class Main {
    static Scanner scan = new Scanner(System.in);
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int N;
        N = scan.nextInt();
        System.out.println(get_han_num(N));
        
    }
    public static int get_han_num(int N) {
        int answer = 0;
        for(int i=1;i<=N;i++) {
            if(is_han(i))
                answer++;
        }
        return answer;
    }
    public static boolean is_han(int num) {
        if(num>=1 && num<=99)
            return true;
        boolean chk = true;
        int cmp = num%10 - num/10%10;
        int tmp = num/10%10;
        num = num/10/10;
        while(num!=0) {
            if(tmp-num%10!=cmp) {
                chk = false;
                break;
            }
            tmp = num%10;
            num/=10;
        }
        return chk;
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

우선 한 자리 수부터 두 자리 수 까지는 모두 등차수열을 나타내므로 한수 판별 함수에서 따로 처리를 해 주었다.

그 다음엔 맨 뒤 2자리의 등차를 구한 후에 다음 자리수와의 차이를 반복적으로 구하면서 등차인지 구하도록 구현했다. 

통과는 했지만 시간과 메모리가 많이 잡아먹는 단점이 있는 코드이다. 범용 함수로 만들려다 보니 이런 결과가 나온 것 같은데 더 좋은 방법은 생각해봐야겠다.

'BOJ > BruteForce' 카테고리의 다른 글

[BOJ] 2798번 블랙잭  (0) 2021.03.10
[BOJ] 1107 리모컨  (0) 2021.02.19
[BOJ] 1182번 부분수열의 합  (0) 2019.07.30
[BOJ] 14501번 퇴사  (0) 2019.07.30
[BOJ] 2309번 일곱 난장이  (0) 2019.07.29