문제 : N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가
일정한 수열을 말한다.
입력 : 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력 : 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
#include<iostream>
using namespace std;
int check(int n)
{
int count = 0, hund, ten, one;
if (n < 100)
return n;
else {
for (int i = 100;i <= n;i++)
{
hund = i / 100;
ten = (i % 100) / 10;
one = (i % 100) % 10;
if ((hund - ten) == (ten - one))
count++;
}
return (99 + count);
}
}
int main()
{
int input = 0;
cin >> input;
cout << check(input) << endl;
return 0;
}
중요 포인트
- 한수의 의미 파악 (한자리와 두 자리를 가진 숫자는 그냥 카운트하면 됨)
- 입력된 수의 자리 수 파악 및 차이 파악 필요
한수는 어떤 정수의 자리수가 등차수열을 이루는 수입니다.
- 입력된수 : 1
예제에서 주어진 1 같은 경우 한자리에 불과해서 1로 출력이 됩니다.
- 입력된수 : 100
마찬가지로 입력이 100으로 입력되었을 때 십의 자리 모두 비교할 다른 자리가 없기 때문에 모두 카운트가 되며
100이후 부터 한수 파악이 시작되는데 100은 자리의 각 수가 등차수열을 이루지 못하므로 99가 나오게 됩니다.
- 입력된수 : 210
210 까지 각 자리의 수가 등차수열을 이루는 한수는 111,123,135,147,159,210 ( 6개 ) + 100미만의 수들 (99개)
= 105개가 됩니다.
main 문에서는 키보드로 수를 입력받게 됩니다.
그리고 특정 함수로 들어가게 되는데 100미만의 조건일 경우 곧바로 return 됩니다. ( 2 자릿수는 한수가 없다 )
100 이상일 때 자릿수를 파악하고 각 자릿수의 차이가 동일할 경우 for 반복문을 100부터 시작하여 입력받은 n까지 체크하면서 카운트가 올라갑니다.
후에 카운트가 다 되면 기존의 "99"+"카운트 된수"의 결과를 리턴하고 출력하게 되어 종료합니다.
'프로그래밍 ( Programming ) > 백준 알고리즘 (BaekJoon Algorithm)' 카테고리의 다른 글
11720번 - 숫자의 합 ( 백준 알고리즘/C ) (0) | 2020.12.10 |
---|---|
11653번 - 아스키 코드 ( 백준 알고리즘/C++ ) (0) | 2020.12.09 |
4673번 - 셀프 넘버 ( 백준 알고리즘 / C++ ) (0) | 2020.12.03 |
15596번 - 정수 N개의 합 ( 백준 알고리즘 / C++ ) (0) | 2020.11.28 |
4344번 - 평균은 넘겠지 ( 백준 알고리즘 / C++ ) (0) | 2020.11.27 |
댓글