반응형
https://www.acmicpc.net/problem/1065
양의 정수 X의 각 자리수가 등차수열을 이룰 때 그 수를 한수라고 한다.
1 <= N <= 1000인 숫자 N이 입력될 경우, N보다 작거나 같은 한수의 개수를 구하는 문제이다.
우선, 1~99는 어떤 수가 입력 되더라도 한수가 되기 때문에, 1~99가 입력 된다면 그 수만큼 전부 한수가 된다.
또한, 1000은 한수가 아니기 때문에 고려 대상에서 같이 제외하였다.
따라서, 이 문제 풀이 핵심은 100 ~ 999까지의 한수를 구하는 것이다.
100 ~ 999까지 한수를 구하기 위해서는 우선 각 자리수를 구해야 하고, 각 자리수의 차가 동일한지 확인 하여야 한다.
#include<iostream>
#define IOS_PREDEFINE() \
( \
(cin.tie(NULL)), \
(cout.tie(NULL)), \
(std::ios::sync_with_stdio(false)), \
(void) 0 \
)
using namespace std;
bool getHan(int n)
{
int arr[3] = {0,};
int reminder = n, idx = 0;
bool isHan = false;
while(reminder)
{
arr[idx++] = reminder % 10;
reminder /= 10;
}
if( (arr[0] - arr[1]) == (arr[1] - arr[2]))
{
return true;
}
return false;
}
int main()
{
IOS_PREDEFINE();
int target = 0;
cin >> target;
int han = 0;
for(int idx = 1; idx <= target; idx++)
{
if (idx < 100)
{
han++;
continue;
}
if(idx == 1000)
break;
if (true == getHan(idx))
{
han++;
}
}
cout << han << '\n';
return 0;
}
'Development. > Problem solving.' 카테고리의 다른 글
[BAEKJOON] 2609 - 최대공약수와 최소공배수 (0) | 2020.08.17 |
---|---|
[BAEKJOON] 1822 - 차집합 (0) | 2020.08.17 |
[BAEKJOON] 2577 - 숫자의 개수 (0) | 2020.08.17 |
[BAEKJOON] 8958 - OX퀴즈 (0) | 2020.08.17 |
[BAEKJOON] 4673 - 셀프 넘버 (0) | 2020.08.17 |