<답안>
#include <iostream>
using namespace std;
bool oneNumber(int n)
{
if(n>99)
{
int first = n%10;
int second = n/10%10;
int term1 = first-second;
int term2;
n = n/10;
while(n > 9)
{
first = n%10;
second = n/10%10;
term2 = first-second;
if(term1 == term2)
{
term1 = term2;
n = n/10;
}
else
return false;
}
return true;
}
else
return true;
}
int main() {
int n, count = 0;
cin>>n;
for(int i=1; i<=n; i++)
{
if(oneNumber(i))
{
count++;
}
}
cout<<count;
return 0;
}
<설명>
"한수"인지 여부를 반환해주는 함수인 oneNumber함수를 만든다
100보다 작은 수들의 경우 모두 "한수" 이므로 true를 반환한다
100이상인 3자리 이상의 수들의 경우
먼저 1의자리인 first를 n%10으로 구한다
10의자리인 second를 n/10%10으로 구한다
first - second를 통해 1의자리와 10의자리 수 간의 차이를 term1에 저장한다
n = n/10을 통해 자리수를 낮춘다
n이 10이상인 경우(두자리수)
같은 방법으로 first, second를 구해 term2를 구한다
term1과 term2를 비교한다
같은경우 : term2를 term1으로 바꾸고 n = n/10한뒤 다시 반복한다
다른경우 : false를 반환하며 함수를 종료한다
그외의 경우 true를 반환하며 함수를 종료한다
이렇게 만들어진 oneNumber 함수를 통해
입력된 숫자를 n으로 저장한 뒤
숫자 i=1부터 n까지 oneNumber함수를 거쳐 true반환된 경우 count를 증가시킨다
최종적으로 count를 출력한다
'백준 > 백준 단계별 문제풀이' 카테고리의 다른 글
백준 11720번 (C++) (0) | 2020.08.22 |
---|---|
백준 11654번 (C++) (0) | 2020.08.21 |
백준 4673번 (C++) (0) | 2020.08.21 |
백준 15596번 (C++) (0) | 2020.08.21 |
백준 4344번 (C++) (0) | 2020.08.21 |