Jun's Development Journey
[BOJ] 1065번 한수 본문
문제
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
|
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 |