백준/백준 단계별 문제풀이

백준 1065번 (C++)

FDEE 2020. 8. 21. 23:09

www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 ��

www.acmicpc.net

 

<답안>

#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