[C++] BOJ #1065 한수
Posted on 2022. 01. 25
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
- 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
- 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
해결방법 및 소스코드
Brute Force 방식으로 해결하였다.
- 1부터 99까지는 모두 다 한수임을 이용하면 쉽다.
- 100부터는 등차수열의 특성인 등차중항을 이용하면 쉽게 해결할 수 있다.
- 입력이 1000보다 작은 수이므로, 1000에 대해서는 따로 예외처리를 하면 된다.
(999를 넣었을 때랑 같은 값이 나오게 하면 됨)
#include <iostream>
using namespace std;
int countHansoo(int &N, int &cnt)
{
//100 이상이므로 한수는 최소 99개부터 시작이다.
cnt = 99;
for (int i = 100; i <= N; i++)
{
int a, b, c;
int temp = i;
c = temp % 10;
temp /= 10;
b = temp % 10;
temp /= 10;
a = temp % 10;
if (2 * b == a + c)
{
cnt++;
}
}
return cnt;
}
int main()
{
int N;
int count = 0;
cin >> N;
//100 미만의 모든 수가 한수임
if (N < 100)
{
count = N;
}
//100 이상부터는 따로 계산해줘야함.
else if (N < 1000)
{
count = countHansoo(N, count);
}
else
{
count = 144;
}
cout << count << endl;
}