문제
풀이
위의 문제를 보면 각 자리의 수가 등차수열을 이루는 수가 한수라고 설명이 되어있습니다. 예를 들어 1이면 비교 대상이 하나 뿐이므로 한수가 됩니다. 59이면 비교대상이 둘 뿐이라 한수가 됩니다. 따라서 99까지는 모든 수가 한수입니다. 그러나 100이상의 수의 경우 비교대상이 세가지 입니다. 따라서 이를 비교하여 등차수열을 이루는지를 알아보면 됩니다.
예를 들어 111의 경우 그대로 1이 3번 나오므로 등차수열을 이루고 있고 한수입니다. 123의 경우 100의 자리부터 1씩 커지기 때문에 한수입니다. 258의 경우 각 자리의 수가 3씩 커지기 때문에 등차수열을 이루고 있고 한수 입니다. 이 점을 이용하여 (100의 자리수 - 10의 자리수) == (10의 자리수 - 1의 자리수) 라는 것을 알 수 있습니다.
이 점을 참고하여 문제 풀이를 진행해주시면 됩니다. 소스코드는 아래와 같습니다.
소스코드
#include <iostream>
using namespace std;
int Hansoo(int n){
int cnt=0;
if (n<100) return n;
else {
for (int i = 100; i <= n; i++)
{
int h = i/100;
int t = (i%100)/10;
int o = (i%100)%10;
if((h-t) == (t-o)) cnt ++;
}
return (99+cnt);
}
}
int main(){
int N;
cin >> N;
cout << Hansoo(N) <<'\n';
}
'Algorithm > Python, C++' 카테고리의 다른 글
백준 15596_정수 N개의 합[C++] (0) | 2022.01.21 |
---|---|
백준 4673_셀프 넘버[C++] (0) | 2022.01.20 |
백준 10818_최소, 최대[C++] (0) | 2022.01.19 |
백준 8958_OX퀴즈[C++] (0) | 2022.01.18 |
백준 4344_평균은 넘겠지[C++] (0) | 2022.01.17 |
댓글