https://www.acmicpc.net/problem/1065
각 자리수가 등차수열을 이루는 한수에 관한 문제.
무작정 판단하기 보다는 숫자 범위를 정하여 한수를 판단했다.
일단 100미만의 자연수는 무조건 등차수열이 될 수 밖에 없다. (동시에 등비수열도 가능하겠다.) 그러므로 100미만의 값이 들어오는 경우는 그 숫자만큼 한수가 존재하므로 이때는 그 수를 return하면 된다.
세자리수중에서 100~110의 범위에서도 한수는 없다. 어떤 방식으로 해도 등차수열이 될 수 없기 때문이다.
즉, 진짜로 공차를 따져야 하는 것은, 111부터 따지면 되는 것이다.
이를 구현하면 다음과 같다
#include <stdio.h>
int hansu (int num) {
int cnt = 0;
int a, b, c;
if (num < 100) { // 100미만의 자연수는 무조건 한수
cnt = num;
} else if (num >= 100 && num <= 110){// 100 ~ 110사이에 한수는 없다.
cnt += 99;
} else {
cnt += 99;
for (int i = 111; i <= num; i++) {
if (i == 1000) { // 1000은 한수가 아니기 때문에 따지지 않는다.
break;
}
a = i / 100;
b = (i / 10) % 10;
c = i % 10;
if ((a - b) == (b - c)) {
cnt++;
}
}
}
return cnt;
}
int main(){
int N;
scanf("%d", &N);
printf("%d", hansu(N));
return 0;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 2675번 C언어 풀이 (0) | 2021.08.10 |
---|---|
백준 10809번 C언어 풀이 (0) | 2021.08.07 |
백준 4673번 C언어 풀이 (0) | 2021.08.06 |
백준 15596번 C언어 풀이 (0) | 2021.08.05 |
백준 4344번 C언어 풀이 (0) | 2021.08.05 |